package cn.lili.mybatis.sharding; import cn.lili.common.utils.DateUtil; import com.google.common.collect.Range; import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; import java.util.ArrayList; import java.util.Collection; /** * 按创建时间年份分库 * * @author Chopper */ public class CreateTimeShardingDatabaseAlgorithm implements PreciseShardingAlgorithm, RangeShardingAlgorithm { @Override public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { Long createTime = preciseShardingValue.getValue(); String value = DateUtil.toString(createTime, "yyyy"); //data2019,data2020 return "data" + value; } @Override public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { Collection collect = new ArrayList<>(); Range valueRange = rangeShardingValue.getValueRange(); //开始年份结束年份 String start = DateUtil.toString(valueRange.lowerEndpoint().longValue(), "yyyy"); String end = DateUtil.toString(valueRange.upperEndpoint().longValue(), "yyyy"); //循环增加区间的查询条件 for (Integer i = Integer.valueOf(start); i <= Integer.valueOf(end); i++) { collect.add("data" + i); } return collect; } }