1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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<Integer> {
- @Override
- public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> 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();
- }
- }
|