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