目錄
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版本
- 使用4.1.0版本,因為本人之前搭建sharding-proxy是用的5.0版本的(請看上一篇搭建說明文章),但沒找到配置自定義分庫規則的地方,所以暫時使用4.1版本代替,如哪位5.0版本配置的使用位置歡迎留言。
下載地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/shardingsphere/4.1.0/apache-shardingsphere-4.1.0-sharding-proxy-bin.tar.gz
通過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服務,就可以使用自己定義的分庫規則了。