1.引入依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
2.yaml文件配置:
server:
port: 8080
spring:
application:
name: test-datasource-provider
# 多数据源配置
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为master
primary: master
strict: false
datasource:
# 主数据库配置,master为数据源名称,配合DS注解使用
master:
url: jdbc:mysql://ip1:3306/test_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
max-active: 30
initial-size: 10
max-wait: 60000
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 20
filter: stat,wall
# 启用ConfigFilter
config:
enabled: true
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 30000
merge-sql: false
wall:
function-check: false
strict-syntax-check: false
multi-statement-allow: true
# 从数据库配置,slave为数据源名称,配合DS注解使用
slave:
url: jdbc:mysql://localhost:3306/test_db2?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true
username: root
password: 123456789
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
max-active: 40
initial-size: 15
max-wait: 60000
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-open-prepared-statements: 20
filter: stat,wall
# 启用ConfigFilter
config:
enabled: true
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 30000
merge-sql: false
wall:
function-check: false
strict-syntax-check: false
multi-statement-allow: true
# 监控配置
druid:
web-stat-filter:
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
url-pattern: /druid/*
reset-enable: false
# 是否开启监控页面
enabled: true
login-username: admin
login-password: "123456"
#连接池重连检测
testConnectionOnCheckout: false
testConnectionOnCheckin: true
idleConnectionTestPeriod: 3600 #单位是妙,即1小时
# mybatis 配置
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.zhou.entity
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.启动类排除Druid数据源的自动装配配置
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
4.测试
- 访问http://应用服务器ip:8080/druid,查看配置是否生效,如果配置成功会出现以下页面:
账号密码为yaml文件配置的admin和123456
- 在需要切换数据源的方法上标注@DS注解,指定要切换的数据源,如果没有配置DS注解,采用默认数据源,即前面配置的master
示例如下:
读取从数据源的数据:
@Override
@DS("slave")
public IPage<Map> query(Subject subject){
return subjectMapper.query(subject.getPage(), subject);
}
读取主数据源的数据:
@Override
@DS("master")// 主数据源为默认数据源,可以不用配置这个注解
public IPage<Map> query(Subject subject){
return subjectMapper.query(subject.getPage(), subject);
}