@TOC()
1.引入依赖
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
2.配置文件 application-pro.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
# 设置默认的数据源或者数据源组,默认值即为 master
primary: master
# 严格模式 匹配不到数据源则报错
strict: true
datasource:
# 主库从库名字自定义
# 主库
master:
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxx
password: xxxxx
url: jdbc:mysql://192.168.1.1:3306/database1?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
# 从库1
slave:
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxx
password: xxxxx
url: jdbc:mysql://192.168.1.2:3307/database2?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
# 从库2
slave2:
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxx
password: xxxxx
url: jdbc:mysql://192.168.1.3:3308/database3?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
druid:
enable: true
max-active: 150
min-idle: 50
initial-size: 50
max-wait: 60000
time-between-eviction-runs-millis: 60000
validation-query: select server_status()
test-on-return: false
test-while-idle: true
test-on-borrow: false
async-close-connection-enable: true
async-init: true
3.对应mapper接口使用不同的数据源
import com.baomidou.dynamic.datasource.annotation.DS;
@Mapper
public class UserService {
public void updateUser(User user) {
}
@DS("master")
public void createUser(User user) {
}
@DS("slave")
public User getUserById(long id) {
return null;
}
@DS("slave1")
public User getUserById(long id) {
return null;
}
}
4.对应mapper接口使用相同的数据源
import com.baomidou.dynamic.datasource.annotation.DS;
@Mapper
@DS("master")
public class UserService {
public void createUser(User user) {
}
public User getUserById(long id) {
return null;
}
public User getUserById(long id) {
return null;
}
}