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服務,就可以使用自己定義的分庫規則了。


免責聲明!

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



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