有业务需要需要灵活配置数据源根据租户进行分库
采用了shardingsphere5.1.1,使用JAVA代码进行配置强制路由
在@ RaigorJiang老师的指导下进行了部分配置
相关关键代码如下:
路由规则配置部分:
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.setDefaultTableShardingStrategy(new NoneShardingStrategyConfiguration());
shardingRuleConfig.setDefaultDatabaseShardingStrategy(new HintShardingStrategyConfiguration("com.xxx.TenantHintShardingAlgorithm"));
Properties props = new Properties();
props.setProperty("algorithmClassName", TenantHintShardingAlgorithm.class.getName());
props.setProperty("strategy", ClassBasedShardingAlgorithmStrategyType.HINT.name());
shardingRuleConfig.getShardingAlgorithms().put("tableShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("CLASS_BASED", props));
HintSharding配置部分
public class TenantHintShardingAlgorithm implements HintShardingAlgorithm<Long> {
@Override
public Collection<String> doSharding(Collection<String> availableTargetNames, HintShardingValue<Long> shardingValue) {
return null;
}
@Override
public void init() {
}
@Override
public String getType() {
return "TENANT_HINT";
}
}
实际应用中发现,在项目中启动init方法会执行到,但是调用过程中doSharding不会执行
hintManager.setDataSourceName(“ds1”)也可以正常切换数据源
请问是因为没具体实现doSharding方法还是配置上有什么问题?
另外,HintShardingAlgorithm中必需实现的getType在这种配置方法下的作用是什么?