序列号生成服务
Micro-Seq 是序列号生成微服务模块,基于 Spring Boot + MyBatis 实现,提供分布式环境下唯一、有序的序列号(编码)生成能力。采用编程式 SeqApi 接口接入(无需注解),支持单号/批量生成、前缀 + 左补零格式化,并通过 SERIALIZABLE 事务隔离 + synchronized 同步 + 乐观锁三重机制保证并发下序列号不重复。内置序列规则的 REST 查询/更新接口,便于维护与管理。Maven 坐标为 com.wkclz.microapp:micro-seq。
功能特性
- 编程式 SeqApi 接入:提供
genSequence/genSequences编程式 API,无需任何注解,业务代码直接调用即可获得序列号;genSequence单号生成(序列长度缺省 4),genSequences支持批量生成(指定 size 一次返回多号) - 前缀 + 左补零:生成结果由「前缀 + 数字序列」组成(如
ORDER+ 6 位左补零 →ORDER000001),数字部分按序列长度codeLength左补零,长度不足时自动补齐 - 并发防重三重保障:核心生成方法采用
@Transactional(isolation = Isolation.SERIALIZABLE)事务 +synchronized方法同步 + 乐观锁(version版本号)三重机制,更新序列失败(影响行数为 0)时抛出异常、放弃本次生成,杜绝序列重复 - 序列自动初始化:首次按前缀生成时自动创建序列记录(当前序列从 0 开始),
seqName未指定时缺省取前缀;后续生成基于已持久化的当前序列递增 - 序列规则管理:序列名称
seqName、前缀prefix、当前序列sequence、序列长度codeLength持久化于mdm_sequence表,前缀唯一(duplicateCheck防重校验) - REST 查询/更新接口:提供序列规则的 REST 接口,支持分页查询(
GET /micro-seq/sequence/page)、详情(GET /micro-seq/sequence/info)、修改(POST /micro-seq/sequence/update) - 自动装配:
SeqAutoConfig自动扫描com.wkclz.micro.seq包下的 Mapper 与组件,引入依赖即可使用
适用场景
- 业务单号/编码生成:订单号、流水号、业务单据号等需要唯一且有序的编码
- 多实例并发场景:多线程、多服务实例下需要保证序列号不重复的高并发生成
- 统一编码格式:通过「前缀 + 定长左补零」生成格式统一、可读性强的业务编码
技术栈
- Java 25
- Spring Boot
- MyBatis
- Lombok
- Swagger(OpenAPI 注解)