tiandihai commented on issue #29225:
URL:
https://github.com/apache/shardingsphere/issues/29225#issuecomment-1828924817
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @Description:
* @author wanglei10
* @date 2023-08-10 13:55
*/
@Slf4j
public class TableShardingAlgorithm implements
StandardShardingAlgorithm<String> {
public static final InheritableThreadLocal<Boolean> NO_SHARDING_HOLDER =
new InheritableThreadLocal<>();
/**
* 分片算法的属性配置
*/
private final Properties properties = new Properties();
/**
* 根据精确分片值进行分片操作,返回分片后的目标表名
*
* @param availableTargetNames 所有的目标表名集合
* @param preciseShardingValue 精确分片值对象,包含了逻辑表名、分片键和分片值
* @return 分片后的目标表名
*/
@Override
public String doSharding(Collection<String> availableTargetNames,
PreciseShardingValue<String> preciseShardingValue) {
return routeTables(availableTargetNames, preciseShardingValue);
}
private String routeTables(Collection<String> availableTargetNames,
PreciseShardingValue<String> preciseShardingValue) {
if (preciseShardingValue == null) {
throw new RuntimeException("shardingValue不能为空");
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
String date = simpleDateFormat.format(new Date());
String actualTableName;
if (BooleanUtils.isTrue(NO_SHARDING_HOLDER.get())) {
actualTableName = preciseShardingValue.getLogicTableName();
}else {
actualTableName =
preciseShardingValue.getLogicTableName().concat("_").concat(date);
}
//把真实表名放进来
availableTargetNames.add(actualTableName);
return actualTableName;
}
/**
* 根据范围分片值进行分片操作,返回分片后的目标表名集合
*
* @param availableTargetNames 所有的目标表名集合
* @param rangeShardingValue 范围分片值对象,包含了逻辑表名、分片键和分片范围
* @return 分片后的目标表名集合
*/
@Override
public Collection<String> doSharding(Collection<String>
availableTargetNames, RangeShardingValue<String> rangeShardingValue) {
return null;
}
/**
* 获取分片算法的类型
*
* @return 分片算法的类型
*/
@Override
public String getType() {
return "TB_SHARDING_BY_DATE";
}
/**
* 获取分片算法的属性配置
*
* @return 分片算法的属性配置
*/
public Properties getProps() {
return properties;
}
/**
* 初始化分片算法和属性配置
*
* @param properties 分片算法的属性配置
*/
@Override
public void init(Properties properties) {
log.info("初始化按日期分表算法 -> properties:{}", properties.toString());
}
}
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]