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

 

posted @ 2021-11-12 14:33  劈天造陆  阅读(3146)  评论(1编辑  收藏  举报