sharding-jdbc读写分离
-
在上一篇文章实现mysql主从复制之后,基于sharding-jdbc实现读写分离。上文地址Mysql主从复制
-
搭建Springboot基本结构,和mysql主从复制,master用于写,slave1,slave2用于读,从库之间采用负载均衡轮询方式,使用sharding-jdbc做好配置即可实现。
-
引入sharding-jdbc依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
- application.yml配置数据源读写分离
spring:
shardingsphere:
datasource:
names:
master,slave1,slave2 #这里的master,slave可以改变,和下面的对应即可
#主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.100:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: 1004
# 从数据源slave1
slave1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.101:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: 1004
# 从数据源slave2
slave2:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.102:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: 1004
sharding:
default-data-source-name: master # 默认数据源,主要用于写
masterslave: # 读写分离配置
name: dataSource # 最终的数据源名称
master-data-source-name: master # 主库数据源名称
slave-data-source-names: slave1,slave2 # 从库数据源名称列表,多个逗号分隔
load-balance-algorithm-type: round_robin #轮询
props:
sql:
show: true #开启SQL显示,默认false
main:
allow-bean-definition-overriding: true #允许数据源bean覆盖
- UserController写两个接口用于测试读写分离
@GetMapping(value = "/list")
public List list(){
return userService.list();
}
@PostMapping(value = "/save")
public String save(@RequestBody User user) {
userService.save(user);
return "ok";
}
-
测试查询
-
测试添加