# 通用id生成器设计说明 ## 概述 id生成在分布式系统或数据库mybatis等框架中经常会使用到。因为算法的不同生成的结果不同。 对于需要不同算法生成id的场景,需要单独去实现。该项目提供一个idService用来支持不同算法生成对应id的能力。 并支持自定义扩展新算法实现。该项目依赖于spring框架。所以需要使用时需要引入spring boot jar。 ## 支持特性 - 指定算法生成 - 支持自定义拓展算法 - 项目引入包, spring自动配置 - 不支持算法抛错处理 - 支持配置默认算法 - 支持分布式ID 雪花算法 ## 使用: 1. 项目引入: ```xml com.kongxiang kongxiang-spring 1.0-SNAPSHOT ``` 2. 使用 `idService` 生成id ```java @Component public class A{ @Autowired private IdService idService ; public void useMethod(){ String id = idService.generate();// 默认 uuid String id1 = idService.generate("uuid");// 指定 Set supports = idService.supports();// 获取支持的算法列表 } } ``` 3. 拓展自定义算法和使用自定义覆盖 - 3.1 : 继承`com.kx.utils.id.IdGenerator` 编写自己的代码生成器,其中getAlgorithm()方法,提供算法名。 - 3.2 : spring 启动时自动加载您定义的生成器类。 - 3.3 : 如果自定义的 idGenerator中的getAlgorithm()方法提供的算法名在系统中有多个, 需要自己使用Spring的`Order`注解去配置优先级。 取Order最大值覆盖替换,如果Order最大值相等,取类名按字符串字典大小比对后最大值的一个。 4. 修改默认算法,修改通过generate()方法使用的算法。默认使用`uuid` ```java /** * 本地机器uuid id 生成器 * @author kongxiang */ @Component public class LocalUuidGenerator implements IdGenerator { @Override public String generate() { return UUID.randomUUID().toString().replace("-",""); } @Override public String getAlgorithm() { return "uuid"; } } ``` 4.1 使用`application.yml` 修改默认的id生成器 ```yaml spring: utils: id: # 默认算法 'uuid' | 'snowflower' defaultIdGenerator: 'uuid' # 雪花算法配置 snowFlower: dataCenterId: 1 workerId: 1 ``` 4.2 支持雪花算法 雪花算法名 `snowflower`