sharding-jdbc/sharding-proxy动态自定义指定分库策略

sharding官网上介绍可以自己重写分库的策略,发现新版的并不是介绍的很全面,这里记录下本人使用过程中的配置过程。

sharding-jdbc重写分库

  • shardiing-jdbc依赖版本

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-namespace</artifactId>
    <version>4.1.0</version>
</dependency>
  • 重写分库规则,class继承PreciseShardingAlgorithm,T泛型看个人分库字段名的类型,我这指定的是Integer。具体代码如下

@Slf4j

public class TestShardingAlgorithm implements PreciseShardingAlgorithm<Integer> {

    private static Map<String, String> dataSourceMap = new HashMap<String, String>();

    static {

        dataSourceMap.put("1", "ds01");

        dataSourceMap.put("2", "ds02");

        dataSourceMap.put("3", "ds03");

    }



    /**

     * Sharding.

     *

     * @param availableTargetNames available data sources or tables's names (当前维护的数据库源列表)

     * @param shardingValue sharding value (表名,分库表的列字段名,分库表的列字段值)

     * @return sharding result for data source or table's name (返回分库的库名)

     */

    @Override

    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> shardingValue) {

        log.info("availableTargetNames: {}", availableTargetNames.toArray().toString());

        log.info("shardingValue: {}", shardingValue.toString());

        return dataSourceMap.get(shardingValue.getValue().toString());

    }

}

  • 自己有想法可以针对以上简单的重写方法进行升级,我们可以维护一套每个租户对应的schema,通过动态读取数据库的内容来获取相应规则,当然后续维护的数据量多了,我们可以将数据缓存到redis,从redis中读取。需要代码的可以在下方留言。这里不过多介绍。

  • yaml文件配置,记得在preciseAlgorithmClassName修改为自己的class包路径


default-database-strategy:

        standard:

          shardingColumn: tenant_id

          preciseAlgorithmClassName: com.example.demo.config.TestShardingAlgorithm #自定义分库策略

  • 上述具体配置如下截图

sharding-proxy配置

sharding-proxy版本

通过idea搭建简单的maven项目,里面只要写上述自定义分库规则的class :TestShardingAlgorithm就行

  • 依赖
项目应用的依赖
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>4.0.0-RC1</version>
</dependency>
  • 将项目达成jar包,放在你安装sharding-proxy的lib目录下面
  • 同样,如果需要从数据读取配置,或者调用api获取相应租户的schema信息,需要源代码,留言联系。这里不做过多介绍
  • 配置yaml文件
  defaultDatabaseStrategy:
    standard:
      shardingColumn: tenant_id
      preciseAlgorithmClassName: com.test.TestShardingAlgorithm #(自己jar包中class的路径)
  • 配置的位置如下截图

  • 重启sharding-proxy服务,就可以使用自己定义的分库规则了。

posted @ 2021-01-28 14:11  Levcon  阅读(2563)  评论(3编辑  收藏  举报