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版本
- 使用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服务,就可以使用自己定义的分库规则了。