README.md 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
# 通用id生成器设计说明

## 概述
 id生成在分布式系统或数据库mybatis等框架中经常会使用到。因为算法的不同生成的结果不同。
 
 对于需要不同算法生成id的场景,需要单独去实现。该项目提供一个idService用来支持不同算法生成对应id的能力。
 并支持自定义扩展新算法实现。该项目依赖于spring框架。所以需要使用时需要引入spring boot jar。
 
 ## 支持特性
 
 - 指定算法生成
 - 支持自定义拓展算法
 - 项目引入包, spring自动配置
 - 不支持算法抛错处理
 - 支持配置默认算法
 
 ## 使用:
 
 1. 项目引入:
 ```xml
       <dependencies>
            <dependency>
                <groupId>com.kongxiang</groupId>
                <artifactId>kongxiang-spring</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
```

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<String> 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";
       }
   }
74 75 76 77 78 79 80 81 82
```

4.1 使用`application.yml` 修改默认的id生成器
```yaml
spring:
  utils:
    id:
      defaultIdGenerator: 'uuid' // 修改

83
```