提供分布式唯一 ID 生成能力,支持雪花算法和号段模式。
<dependency>
<groupId>com.mdframe.forge</groupId>
<artifactId>forge-starter-id</artifactId>
</dependency>
forge:
id:
type: snowflake # snowflake | segment
snowflake:
worker-id: 1
datacenter-id: 1
segment:
step: 1000
@Autowired
private IIdService idService;
public Long generateId() {
return idService.nextId();
}
@Autowired
private ISequenceService sequenceService;
public String generateOrderNo() {
// 生成订单号:ORD20240115001
return sequenceService.nextSequence("ORDER_NO", "ORD", "yyyyMMdd", 3);
}
public interface IIdService {
/**
* 获取下一个 ID
*/
long nextId();
}
public interface ISequenceService {
/**
* 获取下一个序列号
* @param bizType 业务类型
* @param prefix 前缀
* @param dateFormat 日期格式
* @param seqLength 序列号长度
*/
String nextSequence(String bizType, String prefix, String dateFormat, int seqLength);
/**
* 获取下一个纯数字序列号
*/
Long nextSequence(String bizType);
}
forge:
id:
type: snowflake
snowflake:
worker-id: 1 # 工作机器 ID (0-31)
datacenter-id: 1 # 数据中心 ID (0-31)
forge:
id:
type: segment
segment:
step: 1000 # 每次获取的号段大小
号段模式需要创建序列表:
CREATE TABLE sys_id_sequence (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
biz_type VARCHAR(64) NOT NULL COMMENT '业务类型',
max_id BIGINT NOT NULL COMMENT '当前最大 ID',
step INT NOT NULL COMMENT '步长',
version INT NOT NULL COMMENT '版本号',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_biz_type (biz_type)
);