# 通用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`