配置文件展示
shardingsphere:
props:
sql-show: false
datasource:
names:datacenter1,datacenter2,datacenter3
rules:
sharding:
tables:
shape:
actual-data-nodes: datacenter$->{1..3}.shape$->{0..7}
key-generate-strategy:
column: id
key-generator-name: snowflake
table-strategy:
hint:
sharding-algorithm-name: myTest
sharding-algorithms:
myTest:
type: CLASS_BASE
props:
strategy: hint
algorithmClassName: com.config.CustomDataSourceSelector
com.config.CustomDataSourceSelector如下所示
public class CustomDataSourceSelector implements HintShardingAlgorithm<Integer> {
@Override
public Collection<String> doSharding(Collection<String> availableTargetNames, HintShardingValue<Integer> shardingValue) {
Collection<Integer> values = shardingValue.getValues();
Collection<String> dbs= Lists.newArrayList();
for(Integer one: values){
availableTargetNames.forEach(db->{
if(db.endsWith(one.toString())){
dbs.add(db);
}
});
}
return dbs;
}
@Override
public Properties getProps() {
return null;
}
@Override
public void init(Properties properties) {
}
}
测试类:
@Test
public void test() {
//创建HintManager示例
HintManager hintManager = HintManager.getInstance();
//配置分表路由
//hintManager.addTableShardingValue("shape", 1);
//配置分库路由
hintManager.addDatabaseShardingValue("datacenter", 0);
// sql查询数据库
//关闭强制路由
hintManager.close();
}
结果这里的sql查询并没有走datacenter0。经过排查
解决方式:
hintManager.addDatabaseShardingValue("shape", 0);
hintManager.addDatabaseShardingValue("shape", 0); 这里的还是得用逻辑表名才可以。



















