@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.DruidDataSourcedynamic:# 设置默认的数据源或者数据源组,默认值即为 masterprimary: master# 严格模式 匹配不到数据源则报错strict: truedatasource:# 主库从库名字自定义# 主库master:driver-class-name: com.mysql.cj.jdbc.Driverusername: xxxpassword: xxxxxurl: 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.Driverusername: xxxpassword: xxxxxurl: jdbc:mysql://192.168.1.2:3307/database2?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai# 从库2slave2:driver-class-name: com.mysql.cj.jdbc.Driverusername: xxxpassword: xxxxxurl: jdbc:mysql://192.168.1.3:3308/database3?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai druid:enable: truemax-active: 150min-idle: 50initial-size: 50max-wait: 60000time-between-eviction-runs-millis: 60000validation-query: select server_status()test-on-return: falsetest-while-idle: truetest-on-borrow: falseasync-close-connection-enable: trueasync-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;}
}