内置算法
https://shardingsphere.apache.org/document/5.2.0/cn/user-manual/common-config/builtin-algorithm/sharding/
官网介绍已经很清楚了,但是官网的例子不多,下面是使用时间分片算法的具体例子:
Properties properties = new Properties();
//分片键的时间戳格式,必须遵循 Java DateTimeFormatter 的格式 识别数据
properties.setProperty("datetime-pattern", dateTimePattern);
//设置 起始时间 当前时间 2024-03-27 时间分片下界值,格式与 datetime-pattern 定义的时间戳格式一致
properties.setProperty("datetime-lower", dateTimeLower);
//设置 截止时间
properties.setProperty("datetime-upper", dateTimeUpper);
//对应数据库表后缀名202211
properties.setProperty("sharding-suffix-pattern", suffixPattern);
//设置时间间隔
properties.setProperty("datetime-interval-unit", "MONTHS"); //MONTHS DAYS YEARS
//设置时间间隔数量
properties.setProperty("datetime-interval-amount", "1");
shardingAlgorithms.put(shardingAlgorithmName, new AlgorithmConfiguration("INTERVAL", properties));
自定义算法
自定义算法支持2种配置:
首先实现自定义算法类:
@Getter
@CommonsLog
@Component
public class HisDataMonthShardingAlgorithm implements StandardShardingAlgorithm<String> {
private Properties props;
/**
* 设置该参数的原因是,如果在范围查找的时候我们没有设置最小值,比如下面的查询
* where acquisition_time < '2022-08-11 00:00:00'
* 这个时候范围查找就只有上限而没有下限,这时候就需要有一个下限值兜底,不能一致遍历下去
*/
private LocalDate tableLowerDate;
private String suffixPattern;
private ChronoUnit chronoUnit;
/**
* 在配置文件中配置算法的时候会配置 props 参数,框架会将props中的配置放在 properties 参数中,并且初始化算法的时候被调用
*
* @param properties properties
*/
@Override
public void init(Properties properties) {
this.props = properties;
String dateTimeLower = properties.getProperty("dateTimeLower");
suffixPattern = properties.getProperty("suffixPa