自定义分库分表策略,如何传递外部参数

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:

shardingsphere5.2.0

场景、问题:

@Slf4j
public class CloudHintShardingAlgorithm implements HintShardingAlgorithm {
// 分表数量
private static int tableSize;

private Properties props=new Properties();

@Value("${tableSize}")
public void setTableSize(int size) {
    tableSize = size;
}


public CloudHintShardingAlgorithm(){
}

List<String> tcloudIds = Lists.newArrayList();

@Override
public Collection<String> doSharding(Collection<String> availableTargetNames, HintShardingValue<String> shardingValue) {
    List<String> result = Lists.newArrayList();

/* Random random = new Random();
Integer t = random.nextInt(10);
if(t%2 == 0){
result.add(“sharding0”);
}else{
result.add(“sharding1”);
}*/
result.add(“sharding1”);
return result;
}

已进行操作:

现状:

tableSize 无法注入
由于最新版本的5.2是不能在CloudHintShardingAlgorithm 加注解@Component,是由shardingsphere直接进行初始化并注入到spring中,请问如何进行外部参数注入

5.X版本以后,只能将外部参数+HIT策略值本身都放在一个对象中,转成JSON,传到自定义策略中

5.1.1版本,使用spi注入方法,可以直接参考官方的hashmod分片算法,外部参数是通过环境变量插入,和官方类似,注意别加@compent,例子放这个https://blog.csdn.net/yy1653913187/article/details/119358156

这个例子中未看到外部动态参数如何传递呀

目前我的做法,是将外部动态参数+HIT策略值放在一起人员:
@Override
public Collection doSharding(Collection availableTargetNames, HintShardingValue shardingValue) {
String value = null;
Collection values = shardingValue.getValues();
for(String obj :values){
value = obj;
break;
}
ShardingConfigEntity shardingConfigEntity = JSON.parseObject(value, ShardingConfigEntity.class);
Map<String, String> shardingMap = shardingConfigEntity.getShardingMap();
Integer dbNum = shardingConfigEntity.getDbNum();
Long tcloudId = Long.valueOf(shardingConfigEntity.getTcloudId());
}

京ICP备2021015875号