zoukankan      html  css  js  c++  java
  • 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服务,就可以使用自己定义的分库规则了。

  • 相关阅读:
    2014 ACM/ICPC Asia Regional Guangzhou Online HDU 5024 Wang Xifeng's Little Plot
    HDU 5015 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix
    POJ 1269 Intersecting Lines(直线相交的判断)
    POJ 3304 Segments
    POJ 2318 TOYS
    The 2014 ACM-ICPC Asia Mudanjiang Regional First Round C ZOj 3811
    unique函数(先记下来)
    计算几何常用算法(数学知识)
    HUD 3461 codelock 纯题意解释,不含思想
    POJ 1182 食物链
  • 原文地址:https://www.cnblogs.com/levcon/p/14339491.html
Copyright © 2011-2022 走看看