package com.xin.shardingspherejdbcdemo.config.sharding; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.Date; /* * @author :zjq * @date :2020/11/9 10:44 * @description: TODO 数据表分表策略 TableShardingAlgorithm * @version: V1.0 * @slogan: 天下风云出我辈,一入代码岁月催 */ @Slf4j @Component public class TableShardingAlgorithm implements PreciseShardingAlgorithm { @Override public String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue) { System.out.println("table PreciseShardingAlgorithm "); // 真实节点 availableTargetNames.stream().forEach((item) -> { log.info("actual node table:{}", item); }); log.info("logic table name:{},rout column:{}", shardingValue.getLogicTableName(), shardingValue.getColumnName()); //精确分片 log.info("column value:{}", shardingValue.getValue()); String tb_name = shardingValue.getLogicTableName(); // 根据当前日期 来 分库分表 Integer year = shardingValue.getValue(); //String year = String.format("%tY", date); //String mon =String.valueOf(Integer.parseInt(String.format("%tm", date))); // 去掉前缀0 //String dat = String.format("%td", date); // 选择表 tb_name = tb_name + year; log.info("tb_name:" + tb_name); for (String each : availableTargetNames) { log.info("tb_name:" + each); if (each.equals(tb_name)) { return each; } } throw new IllegalArgumentException(); } }