sharding分片规则修改

This commit is contained in:
wangw 2025-01-03 20:58:43 +08:00
parent f5d00b189c
commit 8140b01fd2
2 changed files with 31 additions and 4 deletions

View File

@ -3,6 +3,7 @@ package com.sqx.config;
import com.sqx.modules.utils.InvitationCodeUtil;
import com.sqx.sharding.MasterSlaveRules;
import com.sqx.sharding.ShardingDataBase;
import com.sqx.sharding.StandardShardingStrategyConf;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Data;
@ -13,6 +14,8 @@ import org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration;
import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
import org.apache.shardingsphere.core.strategy.route.standard.StandardShardingStrategy;
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
import org.codehaus.groovy.util.StringUtil;
import org.springframework.beans.factory.annotation.Value;
@ -143,8 +146,10 @@ public class ShardingConfig {
sets.add(tableRuleConfig);
}
// 定义区域表的分库规则
InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration(
regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm);
StandardShardingStrategyConfiguration databaseShardingStrategyConfig = new StandardShardingStrategyConfiguration(
regionTablesShardingDatabaseColumn, new StandardShardingStrategyConf());
// InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration(
// regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm);
for (String regionTable : regionTables) {
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig);
@ -169,9 +174,12 @@ public class ShardingConfig {
sets.add(tableRuleConfig);
}
// 定义区域表的分库规则
InlineShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new InlineShardingStrategyConfiguration(
courseDetailsShardingDatabaseColumn, courseDetailsShardingDatabaseAlgorithm);
StandardShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new StandardShardingStrategyConfiguration(
courseDetailsShardingDatabaseColumn, new StandardShardingStrategyConf());
// InlineShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new InlineShardingStrategyConfiguration(
// courseDetailsShardingDatabaseColumn, courseDetailsShardingDatabaseAlgorithm);
for (String regionTable : courseDetails) {
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
tableRuleConfig.setDatabaseShardingStrategyConfig(courseDetailsShardingStrategyConfig);

View File

@ -0,0 +1,19 @@
package com.sqx.sharding;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
import java.util.Collection;
public class StandardShardingStrategyConf implements PreciseShardingAlgorithm<Long> {
@Override
public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
// 根据ID对5取模来确定表名
long tableIndex = shardingValue.getValue() % 5;
for (String tableName : availableTargetNames) {
if (tableName.endsWith(String.valueOf(tableIndex))) {
return tableName;
}
}
throw new IllegalArgumentException();
}
}