TableShardingAlgorithm.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package com.xin.shardingspherejdbcdemo.config.sharding;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
  4. import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
  5. import org.springframework.stereotype.Component;
  6. import java.util.Collection;
  7. import java.util.Date;
  8. /*
  9. * @author :zjq
  10. * @date :2020/11/9 10:44
  11. * @description: TODO 数据表分表策略 TableShardingAlgorithm
  12. * @version: V1.0
  13. * @slogan: 天下风云出我辈,一入代码岁月催
  14. */
  15. @Slf4j
  16. @Component
  17. public class TableShardingAlgorithm implements PreciseShardingAlgorithm<Integer> {
  18. @Override
  19. public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Integer> shardingValue) {
  20. System.out.println("table PreciseShardingAlgorithm ");
  21. // 真实节点
  22. availableTargetNames.stream().forEach((item) -> {
  23. log.info("actual node table:{}", item);
  24. });
  25. log.info("logic table name:{},rout column:{}", shardingValue.getLogicTableName(), shardingValue.getColumnName());
  26. //精确分片
  27. log.info("column value:{}", shardingValue.getValue());
  28. String tb_name = shardingValue.getLogicTableName();
  29. // 根据当前日期 来 分库分表
  30. Integer year = shardingValue.getValue();
  31. //String year = String.format("%tY", date);
  32. //String mon =String.valueOf(Integer.parseInt(String.format("%tm", date))); // 去掉前缀0
  33. //String dat = String.format("%td", date);
  34. // 选择表
  35. tb_name = tb_name + year;
  36. log.info("tb_name:" + tb_name);
  37. for (String each : availableTargetNames) {
  38. log.info("tb_name:" + each);
  39. if (each.equals(tb_name)) {
  40. return each;
  41. }
  42. }
  43. throw new IllegalArgumentException();
  44. }
  45. }