| 12345678910111213141516171819202122232425262728293031 |
- package com.txz.mall.configurer;
- import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
- import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
- import java.util.Collection;
- public class UserIdTableShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
- @Override
- public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
- long lastFourDigits = getLastFourDigits(shardingValue.getValue());
- // 用户ID取模5,分配到0-4表
- long mod = lastFourDigits % 5;
- for (String tableName : availableTargetNames) {
- if (tableName.endsWith(String.valueOf(mod))) {
- return tableName;
- }
- }
- throw new IllegalArgumentException("未找到匹配的表: " + availableTargetNames + ", 分片值: " + shardingValue);
- }
- // 获取user_id后四位
- private long getLastFourDigits(Long value) {
- if (value == null ) return 0L;
- return value % 10000 ;
- }
- }
|