系列文章
1. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换1-单数据源
2. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换2-基于AbstractRoutingDataSource实现多数据源
3. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换3-基于dynamic-datasource实现多数据源
文章目录
目录
一、dynamic-datasource是什么?
1.简介
dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。
其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x。
2.引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
3. 在application.yml中添加配置
# 动态多数据源配置
spring:
datasource:
druid:
# 用于采集web-jdbc关联监控的数据
webStatFilter:
enabled: true
# 用于展示Druid的统计信息(提供监控信息展示的html页面+提供监控信息的JSON Api)
statViewServlet:
enabled: true
# 设置ip白名单(逗号隔开),不填则允许所有访问
allow:
# ip黑名单(优先于allow)
deny:
# 监控页面的url
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
# 用于统计监控信息
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
# 慢sql标准,单位毫秒
slow-sql-millis: 1000
# 合并sql
merge-sql: true
wall:
config:
# 是否允许一次执行多条语句,默认关闭
multi-statement-allow: true
dynamic:
primary: master #设置默认的数据源
druid: #以下是支持的全局默认值,每个库还可重新设置独立参数
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
datasource:
#主库数据源
master:
url: jdbc:mysql://localhost:3306/db-master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
#从库数据源
slave:
url: jdbc:mysql://localhost:3306/db-slave?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
4. 使用
entity,mapper同之前的文章,在UserServiceImpl和EmployeeServiceImpl上分别添加@DS("master")和@DS("slave")表示连接的数据库为master和slave。controller同之前的文章。
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
@Service
@DS("slave")
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}
二、启动测试
1.项目端口上下文路径配置
server:
port: 9997
servlet:
context-path: /dynamic-datasource-demo
2.启动类
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class DynamicDbDemoApplication {
public static void main(String[] args){
SpringApplication.run(DynamicDbDemoApplication.class,args);
}
}
启动类中需要排除Druid数据源的自动加载类DruidDataSourceAutoConfigure.class
3.启动项目,使用测试工具insomnia访问接口
访问user/list接口
控制台打印出sql语句:
访问成功,可以看到连接的是master数据源。
访问employee/list接口
控制台打印出sql语句:
访问成功,可以看到连接的是slave数据源。数据源切换成功,perfect。
4.访问Druid监控页面
使用statViewServlet下配置的login-username和login-password登录可以看到上面的页面,成功。