shardingjdbc读写分离

shardingjdbc

Posted by 肖圣豪 on 2020-11-05

io.shardingjdbc读写分离

一.读写分离架构图

在这里插入图片描述

二.数据库主从配置

mysql主从设置

三.shardingjdbc配置

1.引入依赖

1
2
3
4
5
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>2.0.3</version>
</dependency>

2.config配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sharding:
jdbc:
datasource:
#master数据库数据源
master:
username: root
password: 111111
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/sharding?useUnicoe=true&characterEncoding=utf-8&serverTimezone=GMT
type: com.alibaba.druid.pool.DruidDataSource
#slave数据库数据源
slave0:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3307/sharding?useUnicoe=true&characterEncoding=utf-8&serverTimezone=GMT
type: com.alibaba.druid.pool.DruidDataSource

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@Configuration
@EnableTransactionManagement
@MapperScan(value = {"com.pineapple.dao"}, sqlSessionFactoryRef = "sqlSessionFactory")
public class MybatisConfig {

@Bean(name = "masterDataSource")
@Primary
@ConfigurationProperties(prefix = "sharding.jdbc.datasource.master")
public DataSource getMasterDataSource() {
return new DruidDataSource();
}

@Bean(name = "slaveDataSource0")
@ConfigurationProperties(prefix = "sharding.jdbc.datasource.slave0")
public DataSource getSlaveDataSource0() {
return new DruidDataSource();
}

@Bean(name = "masterSlaveJdbcDatasource")
public DataSource getMasterSlaveDataSource(@Qualifier("masterDataSource") DataSource dataSourceMaster,
@Qualifier("slaveDataSource0") DataSource dataSourceSlave0) throws SQLException {

Map<String, DataSource> dsMap = new HashMap<>();
dsMap.put("ds-master-0", dataSourceMaster);
dsMap.put("ds-master-0-slave-0", dataSourceSlave0);
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig.setName("ds-0");
masterSlaveRuleConfig.setMasterDataSourceName("ds-master-0");
masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds-master-0-slave-0"));
return MasterSlaveDataSourceFactory.createDataSource(dsMap, masterSlaveRuleConfig, new HashMap<>());
}

@Bean(name = "sqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(
@Qualifier("masterSlaveJdbcDatasource") DataSource masterSlaveJdbcDatasource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setVfs(SpringBootVFS.class);
factoryBean.setDataSource(masterSlaveJdbcDatasource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setMapperLocations(resolver.getResources("classpath*:/mapper/*.xml"));
return factoryBean.getObject();
}

@Bean(name = "transactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("masterSlaveJdbcDatasource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "transactionTemplate")
public TransactionTemplate transactionTemplate(@Qualifier("transactionManager") DataSourceTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
}

shardingjdbc默认master数据库执行delete,update,insert,slave数据库执行select



支付宝打赏 微信打赏

赞赏一下