sharding分片规则修改
This commit is contained in:
@@ -3,6 +3,7 @@ package com.sqx.config;
|
|||||||
import com.sqx.modules.utils.InvitationCodeUtil;
|
import com.sqx.modules.utils.InvitationCodeUtil;
|
||||||
import com.sqx.sharding.MasterSlaveRules;
|
import com.sqx.sharding.MasterSlaveRules;
|
||||||
import com.sqx.sharding.ShardingDataBase;
|
import com.sqx.sharding.ShardingDataBase;
|
||||||
|
import com.sqx.sharding.StandardShardingStrategyConf;
|
||||||
import com.zaxxer.hikari.HikariConfig;
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
import lombok.Data;
|
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.ShardingRuleConfiguration;
|
||||||
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
|
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.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.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
|
||||||
import org.codehaus.groovy.util.StringUtil;
|
import org.codehaus.groovy.util.StringUtil;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
@@ -143,8 +146,10 @@ public class ShardingConfig {
|
|||||||
sets.add(tableRuleConfig);
|
sets.add(tableRuleConfig);
|
||||||
}
|
}
|
||||||
// 定义区域表的分库规则
|
// 定义区域表的分库规则
|
||||||
InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration(
|
StandardShardingStrategyConfiguration databaseShardingStrategyConfig = new StandardShardingStrategyConfiguration(
|
||||||
regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm);
|
regionTablesShardingDatabaseColumn, new StandardShardingStrategyConf());
|
||||||
|
// InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration(
|
||||||
|
// regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm);
|
||||||
for (String regionTable : regionTables) {
|
for (String regionTable : regionTables) {
|
||||||
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
|
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
|
||||||
tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig);
|
tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig);
|
||||||
@@ -169,9 +174,12 @@ public class ShardingConfig {
|
|||||||
sets.add(tableRuleConfig);
|
sets.add(tableRuleConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 定义区域表的分库规则
|
// 定义区域表的分库规则
|
||||||
InlineShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new InlineShardingStrategyConfiguration(
|
StandardShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new StandardShardingStrategyConfiguration(
|
||||||
courseDetailsShardingDatabaseColumn, courseDetailsShardingDatabaseAlgorithm);
|
courseDetailsShardingDatabaseColumn, new StandardShardingStrategyConf());
|
||||||
|
// InlineShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new InlineShardingStrategyConfiguration(
|
||||||
|
// courseDetailsShardingDatabaseColumn, courseDetailsShardingDatabaseAlgorithm);
|
||||||
for (String regionTable : courseDetails) {
|
for (String regionTable : courseDetails) {
|
||||||
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
|
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
|
||||||
tableRuleConfig.setDatabaseShardingStrategyConfig(courseDetailsShardingStrategyConfig);
|
tableRuleConfig.setDatabaseShardingStrategyConfig(courseDetailsShardingStrategyConfig);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user