io.shardingjdbc读写分离
一.读写分离架构图
二.数据库主从配置
三.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
17sharding:
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
"com.pineapple.dao"}, sqlSessionFactoryRef = "sqlSessionFactory") (value = {
public class MybatisConfig {
"masterDataSource") (name =
"sharding.jdbc.datasource.master") (prefix =
public DataSource getMasterDataSource() {
return new DruidDataSource();
}
"slaveDataSource0") (name =
"sharding.jdbc.datasource.slave0") (prefix =
public DataSource getSlaveDataSource0() {
return new DruidDataSource();
}
"masterSlaveJdbcDatasource") (name =
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<>());
}
"sqlSessionFactory") (name =
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();
}
"transactionManager") (name =
public DataSourceTransactionManager transactionManager(@Qualifier("masterSlaveJdbcDatasource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
"transactionTemplate") (name =
public TransactionTemplate transactionTemplate(@Qualifier("transactionManager") DataSourceTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
}
shardingjdbc默认master数据库执行delete,update,insert,slave数据库执行select
赞赏一下