|
|
@@ -0,0 +1,124 @@
|
|
|
+package com.txz.mall.configurer;
|
|
|
+
|
|
|
+import com.zaxxer.hikari.HikariDataSource;
|
|
|
+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 javax.sql.DataSource;
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Properties;
|
|
|
+
|
|
|
+@Configuration
|
|
|
+public class ShardingSphereConfig {
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds0.driver-class-name}")
|
|
|
+ private String ds0DriverClassName;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds0.jdbc-url}")
|
|
|
+ private String ds0JdbcUrl;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds0.username}")
|
|
|
+ private String ds0Username;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds0.password}")
|
|
|
+ private String ds0Password;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds1.driver-class-name}")
|
|
|
+ private String ds1DriverClassName;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds1.jdbc-url}")
|
|
|
+ private String ds1JdbcUrl;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds1.username}")
|
|
|
+ private String ds1Username;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.ds1.password}")
|
|
|
+ private String ds1Password;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.dsdefault.driver-class-name}")
|
|
|
+ private String dsDefaultDriverClassName;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.dsdefault.jdbc-url}")
|
|
|
+ private String dsDefaultJdbcUrl;
|
|
|
+
|
|
|
+ @Value("${sharding.datasource.dsdefault.username}")
|
|
|
+ private String dsDefaultUsername;
|
|
|
+
|
|
|
+ @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());
|
|
|
+
|
|
|
+ shardingRuleConfig.getTableRuleConfigs().add(getFlowTableRuleConfiguration());
|
|
|
+
|
|
|
+ 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}");
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private TableRuleConfiguration getFlowTableRuleConfiguration() {
|
|
|
+ TableRuleConfiguration result = new TableRuleConfiguration("c_flow", "ds$->{0..1}.c_flow_$->{0..3}");
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private TableRuleConfiguration getRedEnvelopeTableRuleConfiguration() {
|
|
|
+ TableRuleConfiguration result = new TableRuleConfiguration("c_red_envelope", "ds$->{0..1}.c_red_envelope_$->{0..3}");
|
|
|
+ result.setDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new UserIdShardingAlg()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|