|
|
@@ -5,10 +5,10 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
|
|
|
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
|
|
|
import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
|
|
|
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.context.annotation.Primary;
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
import javax.sql.DataSource;
|
|
|
import java.sql.SQLException;
|
|
|
@@ -18,7 +18,7 @@ import java.util.Properties;
|
|
|
|
|
|
@Configuration
|
|
|
public class ShardingSphereConfig {
|
|
|
-
|
|
|
+
|
|
|
@Value("${sharding.datasource.ds0.driver-class-name}")
|
|
|
private String ds0DriverClassName;
|
|
|
|
|
|
@@ -54,37 +54,37 @@ public class ShardingSphereConfig {
|
|
|
|
|
|
@Value("${sharding.datasource.dsdefault.password}")
|
|
|
private String dsDefaultPassword;
|
|
|
-
|
|
|
+
|
|
|
@Bean("shardingDataSource")
|
|
|
@Primary
|
|
|
public DataSource shardingDataSource() throws SQLException {
|
|
|
Map<String, DataSource> dataSourceMap = new HashMap<>();
|
|
|
-
|
|
|
+
|
|
|
HikariDataSource dataSource0 = new HikariDataSource();
|
|
|
dataSource0.setDriverClassName(ds0DriverClassName);
|
|
|
dataSource0.setJdbcUrl(ds0JdbcUrl);
|
|
|
dataSource0.setUsername(ds0Username);
|
|
|
dataSource0.setPassword(ds0Password);
|
|
|
dataSourceMap.put("ds0", dataSource0);
|
|
|
-
|
|
|
+
|
|
|
HikariDataSource dataSource1 = new HikariDataSource();
|
|
|
dataSource1.setDriverClassName(ds1DriverClassName);
|
|
|
dataSource1.setJdbcUrl(ds1JdbcUrl);
|
|
|
dataSource1.setUsername(ds1Username);
|
|
|
dataSource1.setPassword(ds1Password);
|
|
|
dataSourceMap.put("ds1", dataSource1);
|
|
|
-
|
|
|
+
|
|
|
HikariDataSource dataSourceFault = new HikariDataSource();
|
|
|
dataSourceFault.setDriverClassName(dsDefaultDriverClassName);
|
|
|
dataSourceFault.setJdbcUrl(dsDefaultJdbcUrl);
|
|
|
dataSourceFault.setUsername(dsDefaultUsername);
|
|
|
dataSourceFault.setPassword(dsDefaultPassword);
|
|
|
dataSourceMap.put("dsdefault", dataSourceFault);
|
|
|
-
|
|
|
+
|
|
|
if (dataSourceMap.isEmpty()) {
|
|
|
throw new IllegalArgumentException("数据源配置不能为空");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
|
|
|
|
|
|
shardingRuleConfig.getTableRuleConfigs().add(getAccountFlowTableRuleConfiguration());
|
|
|
@@ -94,34 +94,34 @@ public class ShardingSphereConfig {
|
|
|
shardingRuleConfig.getTableRuleConfigs().add(getRedEnvelopeTableRuleConfiguration());
|
|
|
|
|
|
shardingRuleConfig.setDefaultDataSourceName("dsdefault");
|
|
|
-
|
|
|
+
|
|
|
Properties props = new Properties();
|
|
|
props.setProperty("sql.show", "true");
|
|
|
-
|
|
|
+
|
|
|
return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private TableRuleConfiguration getAccountFlowTableRuleConfiguration() {
|
|
|
TableRuleConfiguration result = new TableRuleConfiguration("c_account_flow", "ds${0..1}.c_account_flow_${0..3}");
|
|
|
// 修改为按时间分库,按用户ID分表
|
|
|
- result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg()));
|
|
|
- result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg(), new TimeRangeShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg(), new UserIdRangeShardingAlg()));
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private TableRuleConfiguration getFlowTableRuleConfiguration() {
|
|
|
TableRuleConfiguration result = new TableRuleConfiguration("c_flow", "ds${0..1}.c_flow_${0..3}");
|
|
|
// 修改为按时间分库,按用户ID分表
|
|
|
- result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg()));
|
|
|
- result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg(), new TimeRangeShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg(), new UserIdRangeShardingAlg()));
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private TableRuleConfiguration getRedEnvelopeTableRuleConfiguration() {
|
|
|
TableRuleConfiguration result = new TableRuleConfiguration("c_red_envelope", "ds${0..1}.c_red_envelope_${0..3}");
|
|
|
// 修改为按时间分库,按用户ID分表
|
|
|
- result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg()));
|
|
|
- result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("create_time", new TimeShardingAlg(), new TimeRangeShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg(), new UserIdRangeShardingAlg()));
|
|
|
return result;
|
|
|
}
|
|
|
}
|