SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换3-基于dynamic-datasource实现多数据源

该系列文章详细介绍了如何将SpringBoot应用从单数据源升级到多数据源,并实现动态切换。通过dynamic-datasource-spring-boot-starter库,配置了主从数据源,并在Service层使用注解指定数据源,成功实现了数据源的动态选择。同时,文章还展示了如何访问Druid监控页面进行数据库监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章

1. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换1-单数据源

2. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换2-基于AbstractRoutingDataSource实现多数据源

3. SpringBoot+MyBatisPlus+Druid从单数据源到多数据源动态切换3-基于dynamic-datasource实现多数据源


文章目录

目录

系列文章

文章目录

一、dynamic-datasource是什么?

1.简介

2.引入依赖

3. 在application.yml中添加配置

4. 使用

二、启动测试

1.项目端口上下文路径配置

2.启动类 

3.启动项目,使用测试工具insomnia访问接口


一、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登录可以看到上面的页面,成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值