实验环境
springboot版本:2.2.2.RELEASE
shardingsphere版本:4.0.0-RC3
hutool版本:4.5.15(主要是借用里面的雪花算法生成id)
shardingsphere自定义分布式主键,主键可以有很多种生成方式,这里只是方便,为了验证如何自定义主键而已,实际项目中
可以根据需要定义主键,可以参考美团的分布式主键,并改造成适合自己业务的主键。
实验操作
基于上篇文章进行改造:
https://blog.csdn.net/u010772230/article/details/103824771
第一步:编写主键生成类,需要实现接口ShardingKeyGenerator进行扩展。
public class MyKeyGenerator implements ShardingKeyGenerator {
@Override
public Comparable<?> generateKey() {
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
Long id = snowflake.nextId();
System.out.println("我自定义的id" + id);
return id;
}
@Override
public String getType() {
return "MyKeyGenerator";
}
@Override
public Properties getProperties() {
return null;
}
@Override
public void setProperties(Properties properties) {
}
}
第二步:配置SPI
在Apache ShardingSphere中,很多功能实现类的加载方式是通过SPI注入的方式完成的。 Service Provider Interface (SPI)是一种为了被第三方实现或扩展的API,它可以用于实现框架扩展或组件替换。
注意:在resources目录下新建META-INF文件夹,再新建services文件夹,
然后新建文件的名字为org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator,
打开文件:复制自定义分布式主键的类全路径到文件中保存
com.example.shareingjdbctest.config.MyKeyGenerator
第三步:配置application.properties
其中MyKeyGenerator对应自定主键类的getType里面的实现内容
spring.shardingsphere.sharding.tables.user.key-generator.column=id
spring.shardingsphere.sharding.tables.user.key-generator.type=MyKeyGenerator
第四步:验证
在MyKeyGenerator自定义类中打个断点,发现通过新增数据的时候,会进入断点中,并且数据库中保存的数据为这个类生成的id,至此验证完毕。