读写分离-sharding
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package com.accompany.admin.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@@ -16,9 +16,9 @@ import javax.sql.DataSource;
|
||||
public class JdbcConfig {
|
||||
|
||||
@Bean
|
||||
public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
|
||||
public JdbcTemplate jdbcTemplate(@Qualifier("shardingDataSource") DataSource shardingDataSource) {
|
||||
JdbcTemplate jdbcTemplate = new JdbcTemplate();
|
||||
jdbcTemplate.setDataSource(dataSource);
|
||||
jdbcTemplate.setDataSource(shardingDataSource);
|
||||
return jdbcTemplate;
|
||||
}
|
||||
}
|
||||
|
@@ -1,22 +1,30 @@
|
||||
#MySQL数据库配置
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://124.156.164.187:3306/peko?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
data:
|
||||
mongodb:
|
||||
host: 124.156.164.187
|
||||
port: 27017
|
||||
username: peko
|
||||
password: peko@mongo@dev#!
|
||||
database: peko
|
||||
dynamic-datasource:
|
||||
master:
|
||||
poolName: master
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
slave:
|
||||
poolName: slave
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
redis:
|
||||
host: 124.156.164.187
|
||||
port: 6200
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.accompany.flowteam.admin.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@@ -16,9 +17,9 @@ import javax.sql.DataSource;
|
||||
public class JdbcConfig {
|
||||
|
||||
@Bean
|
||||
public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
|
||||
public JdbcTemplate jdbcTemplate(@Qualifier("shardingDataSource") DataSource shardingDataSource) {
|
||||
JdbcTemplate jdbcTemplate = new JdbcTemplate();
|
||||
jdbcTemplate.setDataSource(dataSource);
|
||||
jdbcTemplate.setDataSource(shardingDataSource);
|
||||
return jdbcTemplate;
|
||||
}
|
||||
}
|
||||
|
@@ -1,22 +1,30 @@
|
||||
#MySQL数据库配置
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://124.156.164.187:3306/peko?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
data:
|
||||
mongodb:
|
||||
host: 124.156.164.187
|
||||
port: 27017
|
||||
username: peko
|
||||
password: peko@mongo@dev#!
|
||||
database: peko
|
||||
dynamic-datasource:
|
||||
master:
|
||||
poolName: master
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
slave:
|
||||
poolName: slave
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
redis:
|
||||
host: 124.156.164.187
|
||||
port: 6200
|
||||
|
@@ -0,0 +1,27 @@
|
||||
package com.accompany.core.config;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
public class DataSourceConfig {
|
||||
|
||||
@Primary
|
||||
@Bean(name = "masterDataSource")
|
||||
@ConfigurationProperties(prefix = "spring.dynamic-datasource.master")
|
||||
public DataSource masterDataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "slaveDataSource")
|
||||
@ConfigurationProperties(prefix = "spring.dynamic-datasource.slave")
|
||||
public DataSource slaveDataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
}
|
@@ -49,15 +49,13 @@ public class MybatisPlusConfig {
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private DataSource dataSource;
|
||||
|
||||
@Primary
|
||||
@Bean("sqlSessionFactory")
|
||||
@DependsOn({"pageInterceptor"})
|
||||
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(Interceptor pageInterceptor, MybatisPlusInterceptor mybatisPlusInterceptor){
|
||||
@DependsOn({"shardingDataSource", "pageInterceptor"})
|
||||
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("shardingDataSource") DataSource shardingDataSource,
|
||||
Interceptor pageInterceptor, MybatisPlusInterceptor mybatisPlusInterceptor){
|
||||
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
||||
sqlSessionFactoryBean.setDataSource(dataSource);
|
||||
sqlSessionFactoryBean.setDataSource(shardingDataSource);
|
||||
sqlSessionFactoryBean.setMapperLocations(ResourceUtil.getPathMatchingResource(mapperLocations));
|
||||
sqlSessionFactoryBean.setPlugins(pageInterceptor, mybatisPlusInterceptor);
|
||||
return sqlSessionFactoryBean;
|
||||
@@ -77,9 +75,9 @@ public class MybatisPlusConfig {
|
||||
}
|
||||
|
||||
@Bean("mybatisplusTransactionManager")
|
||||
@DependsOn({"dataSource"})
|
||||
public PlatformTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
@DependsOn({"shardingDataSource"})
|
||||
public PlatformTransactionManager transactionManager(@Qualifier("shardingDataSource") DataSource shardingDataSource) {
|
||||
return new DataSourceTransactionManager(shardingDataSource);
|
||||
}
|
||||
|
||||
}
|
@@ -20,8 +20,8 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shardingsphere</groupId>
|
||||
<artifactId>shardingsphere-jdbc-core</artifactId>
|
||||
<version>${sharding-jdbc-core.version}</version>
|
||||
<artifactId>shardingsphere-jdbc</artifactId>
|
||||
<version>${sharding-jdbc.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@@ -6,14 +6,17 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
|
||||
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
|
||||
import org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
|
||||
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
|
||||
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
|
||||
import org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration;
|
||||
import org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
|
||||
import org.apache.shardingsphere.readwritesplitting.config.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
|
||||
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
|
||||
import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
|
||||
import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
|
||||
import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
|
||||
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
@@ -40,27 +43,35 @@ import java.util.*;
|
||||
public class ShardingSphereConfig {
|
||||
|
||||
@Autowired
|
||||
private DataSource dataSource;
|
||||
@Qualifier("masterDataSource")
|
||||
private DataSource masterDataSource;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("slaveDataSource")
|
||||
private DataSource slaveDataSource;
|
||||
|
||||
@Bean("shardingDataSource")
|
||||
public DataSource shardingDataSource() throws SQLException {
|
||||
List<RuleConfiguration> ruleConfigs = new ArrayList<>();
|
||||
ruleConfigs.add(getRuleConfig());
|
||||
ruleConfigs.add(getReadWriteRuleConfig());
|
||||
ruleConfigs.add(getShardingRuleConfig());
|
||||
ruleConfigs.add(getSingleRuleConfig());
|
||||
|
||||
Map<String, DataSource> dataSourceMap = new HashMap<>(2);
|
||||
dataSourceMap.put("ds", dataSource);
|
||||
Map<String, DataSource> dataSourceMap = new HashMap<>(2,1);
|
||||
dataSourceMap.put("ds", masterDataSource);
|
||||
dataSourceMap.put("ds_slave", slaveDataSource);
|
||||
|
||||
ModeConfiguration modeConfig = new ModeConfiguration("Standalone", new StandalonePersistRepositoryConfiguration("JDBC", new Properties()));
|
||||
//是否打印执行的sql语句
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty("sql-show", "false");
|
||||
properties.setProperty("sql-show", "true");
|
||||
|
||||
return ShardingSphereDataSourceFactory.createDataSource(modeConfig, dataSourceMap, ruleConfigs, properties);
|
||||
}
|
||||
|
||||
@Bean("shardingSqlSessionFactory")
|
||||
@DependsOn({"shardingDataSource", "pageInterceptor"})
|
||||
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSource shardingDataSource,
|
||||
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("shardingDataSource") DataSource shardingDataSource,
|
||||
Interceptor pageInterceptor, MybatisPlusInterceptor mybatisPlusInterceptor) {
|
||||
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
||||
sqlSessionFactoryBean.setDataSource(shardingDataSource);
|
||||
@@ -77,7 +88,26 @@ public class ShardingSphereConfig {
|
||||
return new DataSourceTransactionManager(shardingDataSource);
|
||||
}
|
||||
|
||||
private ShardingRuleConfiguration getRuleConfig() {
|
||||
private SingleRuleConfiguration getSingleRuleConfig() {
|
||||
// 创建单表规则配置
|
||||
SingleRuleConfiguration ruleConfig = new SingleRuleConfiguration();
|
||||
ruleConfig.setTables(List.of("ds.*"));
|
||||
ruleConfig.setDefaultDataSource("ds");
|
||||
return ruleConfig;
|
||||
}
|
||||
|
||||
private ReadwriteSplittingRuleConfiguration getReadWriteRuleConfig() {
|
||||
ReadwriteSplittingDataSourceGroupRuleConfiguration dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
|
||||
"ds", "ds", Arrays.asList("ds", "ds_slave"), "weight_lb");
|
||||
Properties algorithmProps = new Properties();
|
||||
algorithmProps.setProperty("ds_slave", "3");
|
||||
algorithmProps.setProperty("ds", "1");
|
||||
Map<String, AlgorithmConfiguration> algorithmConfigMap = new HashMap<>(1);
|
||||
algorithmConfigMap.put("weight_lb", new AlgorithmConfiguration("WEIGHT", algorithmProps));
|
||||
return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceGroupConfig), algorithmConfigMap);
|
||||
}
|
||||
|
||||
private ShardingRuleConfiguration getShardingRuleConfig() {
|
||||
//table和分表策略分开
|
||||
Collection<ShardingAutoTableRuleConfiguration> autoTableConfigs = new ArrayList<>();
|
||||
// 动态评论按动态id分表 .community_dynamic_comment_${0..9}
|
||||
|
@@ -1,22 +1,30 @@
|
||||
#MySQL数据库配置
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://124.156.164.187:3306/peko?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
data:
|
||||
mongodb:
|
||||
host: 124.156.164.187
|
||||
port: 27017
|
||||
username: peko
|
||||
password: peko@mongo@dev#!
|
||||
database: peko
|
||||
dynamic-datasource:
|
||||
master:
|
||||
poolName: master
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
slave:
|
||||
poolName: slave
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
redis:
|
||||
host: 124.156.164.187
|
||||
port: 6200
|
||||
|
@@ -72,7 +72,7 @@
|
||||
<alipay-sdk-java.version>3.7.110.ALL</alipay-sdk-java.version>
|
||||
<google-api-services-androidpublisher.version>v3-rev24-1.24.1</google-api-services-androidpublisher.version>
|
||||
<payermax-server.version>1.0.12</payermax-server.version>
|
||||
<sharding-jdbc-core.version>5.4.1</sharding-jdbc-core.version>
|
||||
<sharding-jdbc.version>5.5.1</sharding-jdbc.version>
|
||||
<commons-lang.version>2.6</commons-lang.version>
|
||||
<tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version>
|
||||
<tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version>
|
||||
|
@@ -1,22 +1,30 @@
|
||||
#MySQL数据库配置
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://124.156.164.187:3306/peko?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
data:
|
||||
mongodb:
|
||||
host: 124.156.164.187
|
||||
port: 27017
|
||||
username: peko
|
||||
password: peko@mongo@dev#!
|
||||
database: peko
|
||||
dynamic-datasource:
|
||||
master:
|
||||
poolName: master
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
slave:
|
||||
poolName: slave
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
redis:
|
||||
host: 124.156.164.187
|
||||
port: 6200
|
||||
|
@@ -1,22 +1,30 @@
|
||||
#MySQL数据库配置
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://124.156.164.187:3306/peko?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
data:
|
||||
mongodb:
|
||||
host: 124.156.164.187
|
||||
port: 27017
|
||||
username: peko
|
||||
password: peko@mongo@dev#!
|
||||
database: peko
|
||||
dynamic-datasource:
|
||||
master:
|
||||
poolName: master
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
slave:
|
||||
poolName: slave
|
||||
jdbcUrl: jdbc:mysql://124.156.164.187:3306/peko?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false&useSSL=false
|
||||
username: root
|
||||
password: anan@dev##
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
hikari:
|
||||
minimum-idle: 10
|
||||
maximum-pool-size: 20
|
||||
connection-test-query: select 1
|
||||
max-lifetime: 7000
|
||||
redis:
|
||||
host: 124.156.164.187
|
||||
port: 6200
|
||||
|
Reference in New Issue
Block a user