(二)、Sharding-JDBC自定义主键生成器
ShardingSphere不仅提供了内置的分布式主键生成器,例如UUID、SNOWFLAKE,还抽离出分布式主键生成器的接口,方便用户自行实现自定义的自增主键生成器。
- 内置主键生成器:
- UUID 采用UUID.randomUUID()的方式产生分布式主键。
- SNOWFLAKE 在分片规则配置模块可配置每个表的主键生成策略,默认使用雪花算法,生成64bit的长整型数据。
- 自定义主键生成器:
- 自定义主键类,实现ShardingKeyGenerator接口
- 按SPI规范配置自定义主键类
在Apache ShardingSphere中,很多功能实现类的加载方式是通过SPI注入的方式完成的。注意:在resources目录下新建META-INF文件夹,再新建services文件夹,然后新建文件的名字为org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator,打开文件,复制自定义主键类全路径到文件中保存。
首先创建自定义主键类实现org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator接口
package com.qjc.id; import org.apache.shardingsphere.core.strategy.keygen.SnowflakeShardingKeyGenerator; import org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator; import java.util.Properties; import java.util.concurrent.atomic.AtomicLong; public class MyId implements ShardingKeyGenerator { private SnowflakeShardingKeyGenerator snow = new SnowflakeShardingKeyGenerator(); private AtomicLong atomic = new AtomicLong(0); @Override public Comparable<?> generateKey() { System.out.println("------执行了自定义主键生成器MyId-------"); return snow.generateKey(); // return atomic.incrementAndGet(); } @Override public String getType() {
// 配置的时候用 return "QJCKEY"; } @Override public Properties getProperties() { return null; } @Override public void setProperties(Properties properties) { } }
在resources下新建META-INF/services/org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator
文件内容为:自定义主键全类名:com.qjc.id.MyId
最后就是配置
spring.shardingsphere.sharding.tables.t_user.key-generator.column=id # 使用雪花算法 #spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE # 使用自定义主键生成器 spring.shardingsphere.sharding.tables.t_user.key-generator.type=QJCKEY
分库分表参考
完整代码及sql脚本在:
https://gitee.com/xiaorenwu_dashije/sharding-sphere-demo.git
劈天造陆,开辟属于自己的天地!!!与君共勉