# 源码
/**
* @author :Yijs
* @date :Created in 2019/4/23 14:35
* @description:${description
* @version : $version
*/
public static class SnowflakeIdUtil {
/**
* 获取随机UUID
*
* @return 随机UUID
*/
public static String randomUUID() {
return UUID.randomUUID().toString();
}
/**
* 简化的UUID,去掉了横线
*
* @return 简化的UUID,去掉了横线
*/
public static String simpleUUID() {
return UUID.randomUUID().toString(true);
}
/**
* 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID
*
* @return 随机UUID
* @since 4.1.19
*/
public static String fastUUID() {
return UUID.fastUUID().toString();
}
/**
* 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID
*
* @return 简化的UUID,去掉了横线
* @since 4.1.19
*/
public static String fastSimpleUUID() {
return UUID.fastUUID().toString(true);
}
/**
* 创建MongoDB ID生成策略实现<br>
* ObjectId由以下几部分组成:
*
* <pre>
* 1. Time 时间戳。 2. Machine 所在主机的唯一标识符,一般是机器主机名的散列值。 3. PID 进程ID。确保同一机器中不冲突 4. INC 自增计数器。确保同一秒内产生objectId的唯一性。
* </pre>
*
* 参考:http://blog.csdn.net/qxc1281/article/details/54021882
*
* @return ObjectId
*/
public static String objectId() {
return ObjectId.next();
}
/**
* 创建Twitter的Snowflake 算法<br>
* 分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
* <p>
* snowflake的结构如下(每部分用-分开):<br>
*
* <pre>
* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
* </pre>
*
* 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)<br>
* 然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)<br>
* 最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
* <p>
* 参考:http://www.cnblogs.com/relucent/p/4955340.html
*
* @param workerId 终端ID
* @param datacenterId 数据中心ID
* @return {@link Snowflake}
*/
public static FgbpSnowflakeUtil createSnowflake(long workerId, long datacenterId) {
return new FgbpSnowflakeUtil(workerId, datacenterId);
}
}
/**
* Twitter的Snowflake 算法<br>
* 分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。
* <p>
* snowflake的结构如下(每部分用-分开):<br>
*
* <pre>
* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
* </pre>
*
* 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)<br>
* 然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)<br>
* 最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
* 并且可以通过生成的id反推出生成时间,datacenterId和workerId
* <p>
* 参考:http://www.cnblogs.com/relucent/p/4955340.html
*
* @author Looly
* @since 3.0.1
*/
public static class FgbpSnowflakeUtil {
/**
* 根据Snowflake的ID,获取机器id
*
* @param id snowflake算法生成的id
* @return 所属机器的id
*/
public long getWorkerId(long id) {
return id >> workerIdShift & ~(-1L << workerIdBits);
}
/**
* 根据Snowflake的ID,获取数据中心id
*
* @param id snowflake算法生成的id
* @return 所属数据中心
*/
public long getDataCenterId(long id) {
return id >> datacenterIdShift & ~(-1L << datacenterIdBits);
}
/**
* 根据Snowflake的ID,获取生成时间
*
* @param id snowflake算法生成的id
* @return 生成的时间
*/
public long getGenerateDateTime(long id) {
return (id >> timestampLeftShift & ~(-1L << 41L)) + twepoch;
}
private final long twepoch = 1288834974657L;
private final long workerIdBits = 2L;
private final long datacenterIdBits = 2L;
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
private final long sequenceBits = 10L;
private final long workerIdShift = sequenceBits;
private final long datacenterIdShift = sequenceBits + workerIdBits;
private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
private final long sequenceMask = -1L ^ (-1L << sequenceBits);
private long workerId;
private long datacenterId;
private long sequence = 0L;
private long lastTimestamp = -1L;
private boolean useSystemClock;
/**
* 构造
*
* @param workerId 终端ID
* @param datacenterId 数据中心ID
*/
public FgbpSnowflakeUtil(long workerId, long datacenterId) {
this(workerId, datacenterId, false);
}
/**
* 构造
*
* @param workerId 终端ID
* @param datacenterId 数据中心ID
* @param isUseSystemClock 是否使用 {@link SystemClock} 获取当前时间戳
*/
public FgbpSnowflakeUtil(long workerId, long datacenterId, boolean isUseSystemClock) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(
StrUtil.format("worker Id can't be greater than {} or less than 0", maxWorkerId));
}
if (datacenterId > maxDatacenterId || datacenterId < 0) {
throw new IllegalArgumentException(
StrUtil.format("datacenter Id can't be greater than {} or less than 0", maxDatacenterId));
}
this.workerId = workerId;
this.datacenterId = datacenterId;
this.useSystemClock = isUseSystemClock;
}
/**
* 下一个ID
*
* @return ID
*/
public synchronized long nextId() {
long timestamp = genTime();
if (timestamp < lastTimestamp) {
throw new IllegalStateException(StrUtil
.format("Clock moved backwards. Refusing to generate id for {}ms", lastTimestamp - timestamp));
}
if (lastTimestamp == timestamp) {
sequence = (sequence + 1) & sequenceMask;
if (sequence == 0) {
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift)
| (workerId << workerIdShift) | sequence;
}
/**
* 循环等待下一个时间
*
* @param lastTimestamp 上次记录的时间
* @return 下一个时间
*/
private long tilNextMillis(long lastTimestamp) {
long timestamp = genTime();
while (timestamp <= lastTimestamp) {
timestamp = genTime();
}
return timestamp;
}
/**
* 生成时间戳
*
* @return 时间戳
*/
private long genTime() {
return this.useSystemClock ? SystemClock.now() : System.currentTimeMillis();
}
}
- 服务组件
- sca-register注册配置中心
- sca-gateway服务网关
- sca-auth认证授权服务
- sca-upms权限管理服务
- sca-quartz定时任务服务
- sca-monitor系统监控服务
- sca-commservie通讯前置服务
- sca-sentinel限流熔断服务
- sca-codegen代码生成服务
- sca-message消息发送服务
- sca-rule规则引擎服务
- sca-workflow工作流引擎服务
- sca-report报表服务
- ELK日志服务
- SkyWalking链路跟踪
- Prometheus监控
- 技术组件
- sca-common-swagger(聚合文档)
- sca-common-log(系统日志)
- sca-common-sentinel(熔断限流)
- sca-common-feign(Feign接口调用)
- sca-common-sequence(分布式发号器)
- sca-common-gray(灰度发布)
- sca-common-security(授权认证)
- sca-common-datasource(动态数据源)
- sca-common-data(数据库及缓存)
- sca-common-oss(文件服务)
- sca-common-xss(XSS安全过滤)
- sca-common-test(微服务单元测试)
- sca-common-test-alone(单体应用单元测试)
- sca-common-memdb(内存数据库)
- 日志脱敏
- Pdf文档转换及预览
- IDE组件
- IDE技术组件介绍
- FastJson技术组件类
- 对象转string技术组件
- JDBC操作技术组件类
- SQL查询(完整SQL)技术组件
- 关闭连接技术组件
- 执行预编译SQL(update)技术组件
- 数据分页查询技术组件
- 数据删除技术组件
- 数据批量插入技术组件
- 数据插入技术组件
- 数据更新技术组件
- 标准数据查询方法(单表)技术组件
- 获取序列号技术组件
- 行数统计技术组件
- 调用存储过程技术组件
- 预编译SQL查询(参数)
- 集合操作技术组件类
- Set和List类型互转技术组件
- 交集技术组件
- 增加元素(批量)技术组件
- 增加元素技术组件
- 差集技术组件
- 并集技术组件
- 替换元素技术组件
- 集合删除(下标)技术组件
- 集合删除(元素)技术组件
- 集合清空技术组件
- 金额处理技术组件类
- 乘技术组件
- 元转换为分技术组件
- 减技术组件
- 删除千分符技术组件
- 加技术组件
- 取金额绝对值技术组件
- 字符串转BigDecimal技术组件
- 是否为0技术组件
- 金额格式化技术组件
- 金额比较技术组件
- 金额舍入技术组件
- 金额转大写技术组件
- 除技术组件
- Redishash操作的组件集合
- 删除字段技术组件
- 字段是否存在技术组件
- 设置字段值(覆盖)技术组件
- 获取字段值技术组件
- 设置字段值(不覆盖)技术组件
- 批量设置字段值技术组件
- 批量获取字段值技术组件
- 获取字段数量技术组件
- 获取字段名称列表技术组件
- 获取字段值列表技术组件
- 获取字段和值列表技术组件
- Redis_Key操作技术组件类
- 获得redisTemplate技术组件
- 重命名key技术组件
- 清空Redis技术组件
- key是否存在技术组件
- 取消过期时间技术组件
- 获取数据结构类型技术组件
- 设置过期时间(毫秒)技术组件
- 设置固定过期时间技术组件
- 剩余存活时间(秒)技术组件
- 删除(批量)技术组件
- 删除(单个)技术组件
- 移动key到指定db技术组件
- 集合排序(正序)技术组件
- Redis_List操作组件操作类
- 插入(尾部)技术组件
- 插入(头部)技术组件
- 列表长度技术组件
- 截取区间列表元素技术组件
- 保留列表元素技术组件
- 获取列表元素(按下标)技术组件
- 设置列表元素(按下标)技术组件
- 删除元素(按值出现次数)技术组件
- 移除并返回元素(头部)技术组件
- 移除并返回元素(尾部)技术组件
- 已有列表插入(尾部)技术组件
- 已有列表插入(头部)技术组件
- 已有列表插入(按位置)技术组件
- 配置中心技术组件类
- 获取Nacos配置内容技术组件
- 通讯前置技术组件类
- 异步应答技术组件
- 组报文(前置)技术组件
- 解报文(前置)技术组件
- 调用第三方交易技术组件
- 调试输出技术组件类
- 输出日志(debug)技术组件
- 输出日志(warn)技术组件
- 输出日志(error)技术组件
- 输出日志(info)技术组件
- 编解码处理技术组件类
- BCD编码技术组件
- BCD解码技术组件
- Base64编码技术组件
- Base64解码技术组件
- 服务调用技术组件类
- 交易调用(分布式)技术组件
- 交易调用(第三方系统)技术组件
- 服务调用(rest服务名)技术组件
- 服务调用(ip-port)技术组件
- 日期时间技术组件类
- 当前时间(date)技术组件
- 当前时间(字符串)技术组件
- 当前时间(毫秒)技术组件
- 日期格式检查技术组件
- 日期比较技术组件
- 日期相加技术组件
- 格式化日期技术组件
- 获取日历字段技术组件
- 计算时间差(Date)技术组件
- 计算时间差(字符串)技术组件
- 转换日期对象技术组件
- 文件操作技术组件类
- MD5计算签名技术组件
- ZIP文件压缩技术组件
- ZIP文件解压缩技术组件
- 写文件内容技术组件
- 创建文件技术组件
- 创建文件目录技术组件
- 文件删除技术组件
- 文件合并技术组件
- 文件大小技术组件
- 文件存在检查技术组件
- 文件拷贝技术组件
- 文件查找技术组件
- 读文件内容技术组件
- 读文件行技术组件
- 数据库操作技术组件类
- 切换数据源技术组件
- 删除(BatchIds)技术组件
- 删除(Entity)技术组件
- 删除(ID)技术组件
- 删除(columnMap)技术组件
- 回滚上一事务技术组件
- 回滚全部事务技术组件
- 开启事务技术组件
- 执行指定方法技术组件
- 提交上一事务技术组件
- 提交全部事务技术组件
- 新增数据技术组件
- 更新(Entity)技术组件
- 更新(ID)技术组件
- 查询(BatchIds)技术组件
- 查询(ID)技术组件
- 查询(Objects)技术组件
- 查询(columnMap)技术组件
- 查询(list)技术组件
- 查询(map)技术组件
- 查询(分页)技术组件
- 查询(单条)技术组件
- 查询(总条数)技术组件
- 清理数据源技术组件
- 数据字典技术组件类
- 平台字典技术组件
- 应用字典技术组件
- 银行字典技术组件
- 平台内置组件技术组件类
- switch选择器技术组件
- 从异步组件中获取数据技术组件
- 初始化线程池技术组件
- 判断异步组件是否已完成技术组件
- 当期线程休眠技术组件
- 获取异常信息到容器技术组件
- 获取环境变量技术组件
- 获取系统变量技术组件
- 表达式判断技术组件
- 设置全局错误技术组件
- 随机正整数技术组件
- 对象操作技术组件类
- map转对象技术组件
- 创建list技术组件
- 创建实体类对象(空对象)技术组件
- 创建实体对象(赋值)技术组件
- 反序列化对象技术组件
- 对象属性赋值技术组件
- 对象序列化成数组技术组件
- 获取对象类型名称技术组件
- 获得对象字段值技术组件
- 获得对象属性及值列表技术组件
- Redis_Set操作技术组件类
- 添加元素技术组件
- 获取所有元素技术组件
- 移除指定元素技术组件
- 随机移除并返回(一个)技术组件
- 随机移除并返回(多个)技术组件
- 集合元素数量技术组件
- 是否包含指定元素技术组件
- 随机返回元素(一个)技术组件
- 随机返回元素(多个)技术组件
- Redis_String操作技术组件类
- 设置值(覆盖)技术组件
- 获取值技术组件
- 获取值(批量)技术组件
- 字符串追加值技术组件
- 设置值(不覆盖)技术组件
- 设置值(带过期时间:秒)技术组件
- 覆盖部分值技术组件
- 截取区间字符串技术组件
- 赋值并返回旧值技术组件
- 值长度技术组件
- Redis_ZSet操作技术组件类
- ZSet添加元素技术组件
- 获取区间集合元素(正序按下标)技术组件
- 获取区间集合元素(倒序按下标)技术组件
- 移除集合元素技术组件
- 增加元素的排序值技术组件
- 获取元素排名(正序)技术组件
- 获取元素排名(倒序)技术组件
- ZSet集合元素数量技术组件
- 获取元素排序值技术组件
- 统计区间元素数量技术组件
- 移除区间元素(按排名)技术组件
- 移除区间元素(按排序值)技术组件
- 容器操作技术组件类
- 取容器深度技术组件
- 容器删除(按value)技术组件
- 容器变量删除(保留keys)技术组件
- 容器变量删除(删除单个key)技术组件
- 容器变量删除(删除多个key)技术组件
- 容器变量赋值技术组件
- 容器变量赋值(批量)技术组件
- 获取容器变量值技术组件
- 容器变量拷贝技术组件
- 容器变量获取(批量)技术组件
- 容器清空技术组件
- 容器多层次赋值技术组件
- Redis计算操作组件类
- 减(整数)技术组件
- 减1技术组件
- 加(整数)技术组件
- 加1技术组件
- 加(浮点数)技术组件
- hash字段加(整数)技术组件
- UUID和ID技术组件类
- 生成UUID技术组件
- 生成ID技术组件
- 批量生成ID技术组件
- 公共方法源码
- 安全组件技术组件类
- 3DES加密技术组件
- 3DES解密技术组件
- DES加密技术组件
- DES解密技术组件
- MD5十进制字符串技术组件
- MD5计算签名技术组件
- 获取CRC16码技术组件
- excel技术组件类
- 获取工作簿技术组件
- 获取工作簿(文件名)技术组件
- 工作簿写文件技术组件
- sheet数技术组件
- sheet行数技术组件
- 工作簿数据行数技术组件
- sheet列表技术组件
- 获取sheet技术组件
- 创建工作簿(xlsx)技术组件
- 创建工作簿(指定格式)技术组件
- 工作簿64编码技术组件
- 文件是否超出限制技术组件
- 文件是否超出限制(文件名)技术组件
- 输出文件地址技术组件
- 新建日期文件夹技术组件
- 截取文件路径技术组件
- 工作簿清理技术组件
- 打开Excel文件技术组件
- 取Excel列数据技术组件
- 取Excel单元格技术组件
- 取Excel行列数技术组件
- 取Excel行数据技术组件
- 公共方法
- 字符串技术组件类
- 字符串切割技术组件
- 字符串去空格技术组件
- 字符串是否包含技术组件
- 字符串截取技术组件
- 统计字符数技术组件
- 统计字节数技术组件
- 以子字符串开始技术组件
- 以子字符串结尾技术组件
- 字符串转大写技术组件
- 字符串转小写技术组件
- 是否包含全角字符技术组件
- 字符串拼接技术组件
- 字符串连接技术组件
- 字符串替换技术组件
- 字符串正则表达式替换技术组件
- 字符串非空技术组件
- 字符串补齐技术组件
- 正则表达式匹配技术组件
- 字符串编码转换技术组件
- 字符串查找定位技术组件
- 变量操作技术组件类
- 字段检查(长度范围)技术组件
- 正则表达式检查技术组件
- 数字检查(大小区间)技术组件
- 变量字段检查(类型、长度)技术组件
- 身份证号校验技术组件
- 身份照15位转18位技术组件
- 上传下载技术组件类
- FTP文件上传技术组件
- FTP文件下载技术组件
- SFTP文件上传技术组件
- SFTP文件下载技术组件
- 自定义组件开发
- IDE技术组件包,技术组件类创建
- 新建、编辑IDE技术组件
- 过时组件介绍
- 技术组件API
- 新建普通java类
- 注册技术组件
- 打包技术组件
- 前端控件