UserIdTableShardingAlgorithm.java 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. package com.txz.mall.configurer;
  2. import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
  3. import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
  4. import java.util.Collection;
  5. public class UserIdTableShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
  6. @Override
  7. public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
  8. long lastFourDigits = getLastFourDigits(shardingValue.getValue());
  9. // 用户ID取模5,分配到0-4表
  10. long mod = lastFourDigits % 5;
  11. for (String tableName : availableTargetNames) {
  12. if (tableName.endsWith(String.valueOf(mod))) {
  13. return tableName;
  14. }
  15. }
  16. throw new IllegalArgumentException("未找到匹配的表: " + availableTargetNames + ", 分片值: " + shardingValue);
  17. }
  18. // 获取user_id后四位
  19. private long getLastFourDigits(Long value) {
  20. if (value == null ) return 0L;
  21. return value % 10000 ;
  22. }
  23. }