(二)、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
 

分庫分表參考

SpringBoot2.0.3.RELEASE+sharding-jdbc4.1.0+mybatis-plus3.4.1+druid1.1.22 快速搭建分庫分表 - 劈天造陸 - 博客園 (cnblogs.com) 

完整代碼及sql腳本在:

https://gitee.com/xiaorenwu_dashije/sharding-sphere-demo.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM