shardJDBC快速配置分表

  1. 导入依赖:
       <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>
  1. 配置分表策略

public class HashShardingStrategy implements PreciseShardingAlgorithm<Integer> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> shardingValue) {
        Integer inboxPlatform = shardingValue.getValue();
        // 根据业务调用平台方来分表
        String tb_index = getTbIndex(inboxPlatform,availableTargetNames.size());
        for (String each : availableTargetNames) {
            if (each.endsWith(tb_index)) {
                return each;
            }
        }
        throw new IllegalArgumentException(String.format("index为%s的表不存在",tb_index));
    }
    private String getTbIndex(Integer key,int count){
        return String.valueOf(key);
    }
}

  1. 配置主键生成算法
    shardjdbc自带了两种主键生成算法,
    UUIDShardingKeyGenerator:
    UUID 虽然可以做到全局唯一性,但还是不推荐使用它作为主键,因为我们的实际业务中不管是 user_id 还是 order_id 主键多为整型,而 UUID 生成的是个 32 位的字符串
    SnowflakeShardingKeyGenerator:
    了解了雪花算法的主键 ID 组成后不难发现,这是一种严重依赖于服务器时间的算法,而依赖服务器时间的就会遇到一个棘手的问题:时钟回拨。
    自定义主键生成算法:
    在这里插入图片描述
    注意:需要在资源文件目录下创建文件夹:META-INF/services

public class HashShardingStrategy implements PreciseShardingAlgorithm<Integer> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> shardingValue) {
        Integer inboxPlatform = shardingValue.getValue();
        // 根据业务调用平台方来分表
        String tb_index = getTbIndex(inboxPlatform,availableTargetNames.size());
        for (String each : availableTargetNames) {
            if (each.endsWith(tb_index)) {
                return each;
            }
        }
        throw new IllegalArgumentException(String.format("index为%s的表不存在",tb_index));
    }
    private String getTbIndex(Integer key,int count){
        return String.valueOf(key);
    }
}

4.xml配置



spring.shardingsphere.datasource.数据库名.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.数据库名.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.数据库名.url=jdbc:mysql://xxx
spring.shardingsphere.datasource.数据库名.username = xxx
spring.shardingsphere.datasource.数据库名.password = xxxx
spring.shardingsphere.datasource.数据库名.maxPoolPreparedStatementPerConnectionSize = 20
spring.shardingsphere.datasource.数据库名.maxWait = 60000
spring.shardingsphere.datasource.数据库名.initialSize = 5
spring.shardingsphere.datasource.数据库名.timeBetweenEvictionRunsMillis = 60000
spring.shardingsphere.datasource.数据库名.minEvictableIdleTimeMillis = 300000
spring.shardingsphere.datasource.数据库名.poolPreparedStatements = false
spring.shardingsphere.datasource.数据库名.minIdle = 5
spring.shardingsphere.datasource.数据库名.maxActive = 20
spring.shardingsphere.datasource.数据库名.testWhileIdle = true
spring.shardingsphere.datasource.数据库名.validationQuery = SELECT 1 FROM DUAL
spring.shardingsphere.datasource.数据库名.filters = stat,wall,log4j
spring.shardingsphere.datasource.数据库名.connectionProperties = servlets.stat.mergeSql=true;servlets.stat.slowSqlMillis=5000
spring.shardingsphere.datasource.数据库名.testOnReturn = true


spring.shardingsphere.sharding.default-data-source-name = 数据库名
#数据库表
#spring.shardingsphere.sharding.tables.数据库表.database-strategy.standard.sharding-column=id
#spring.shardingsphere.sharding.tables.数据库表.database-strategy.standard.precise-algorithm-class-name=com.xxx.config.DataBaseHashShardingStrategy
#spring.shardingsphere.sharding.tables.数据库表.actual-data-nodes=ds.数据库表,ds.image_info_cdn_test,ds.image_info_cdn_20$->{23..99}$->{(1..12).collect { it < 10 ? '0' + it : it }}
spring.shardingsphere.sharding.tables.数据库表.actual-data-nodes = 数据库名.数据库表_$->{(0..2)}
spring.shardingsphere.sharding.tables.数据库表.table-strategy.standard.sharding-column = inbox_platform
spring.shardingsphere.sharding.tables.数据库表.table-strategy.standard.precise-algorithm-class-name = com.xxx.config.HashShardingStrategy
spring.shardingsphere.sharding.tables.数据库表.key-generator.column = id
spring.shardingsphere.sharding.tables.数据库表.key-generator.type = GUID


spring.shardingsphere.sharding.binding-tables = 数据库表
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值