SpringBoot整合mybatis-plus配置多数据源,整合Druid连接池及数据源监控

文章目录

    • 添加相应依赖(重要)
      • 排除原生Druid的快速配置类
    • yml配置
    • 使用多数据源
      • 如何在同一个方法中切换数据源?
    • 整合Druid连接池及数据源监控

第一次用mybatis-plus配置多数据源也是踩了很多坑,写一篇文章记录下详细的配置过程。首先要自行搭建一个初始化的springboot工程

添加相应依赖(重要)

为什么说添加相应依赖很重要,因为这里坑很多,依赖添不好启动直接会jar包冲突报错的。
1.MyBatis-Plus官方文档说多数据源配置第一步要引入dynamic-datasource-spring-boot-starter

<!-- 实现对 dynamic-datasource 的自动化配置 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>2.5.4</version>
</dependency>

2.使用MyBatis-Plus当然少不了实现对 MyBatis 的自动化配置

<dependency>
   <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

注意这时就出现第一个坑:有了mybatis-plus,mybatis就不用引入不然有冲突,所以下边这个依赖不要引入:

<!--
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.spring.boot.version}</version>
</dependency>-->

3.mysql依赖肯定得有:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

4.引入德鲁伊连接池:

<dependency>
   <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.1</version>
</dependency>

注意这时第二个坑就出现了: 注意需要在springboot配置中排除原生Druid的快速配置类:DruidDataSourceAutoConfigure。让mybatis-plus提供的dynamic-datasource来完成配置。不然启动直接报如下错误:
SpringBoot整合mybatis-plus配置多数据源,整合Druid连接池及数据源监控_第1张图片

排除原生Druid的快速配置类

两种方式二选一即可:
1)在springboot启动类上加如下配置:

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

2)在application.yml配置文件中添加如下配置(properties同理):

spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

yml配置

一般项目中会放三个application配置文件(application.yml、application-dev.yml、application-prod.yml),因为开发环境用的配置肯定和生产环境不一样的,所以这样方便我们切换:
1.application.yml(放些开发和生产环境通用的配置)如下:

server:
  port: 8088
spring:
  profiles:
    active: dev #引入开发环境
  application:
    name: demo #服务名
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 10 #初始化时建立物理连接的个数
      min-idle: 10 #最小连接池数量
      maxActive: 100 #最大连接池数量
      maxWait: 20000 #获取连接时最大等待时间,单位毫秒
      #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      time-between-eviction-runs-millis: 20000 #既作为检测的间隔时间又作为test-while-idle执行的依据
      min-evictable-idle-time-millis: 30000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
      #用来检测连接是否有效的sql
      #mysql中为 select 'x'
      #oracle中为 select 1 from dual
      validation-query: SELECT 'x'
      test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      exception-sorter: true #当数据库抛出不可恢复的异常时,抛弃该连接
      pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
      max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
      #通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
      #filters通过别名的方式配置扩展插件,常用的插件有:
      #监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
      filters: stat,wall,log4j
      #设置访问druid监控页面的拦截路径及账号和密码,默认没有
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin
# mybatis-plus通用配置
mybatis-plus:
  configuration:
    # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
    map-underscore-to-camel-case: false

2.application-dev.yml(放些开发环境的配置)多数据源配置就在这里,如下:

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://192.168.100.30:3306/erp4?useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
          username: erplocal
          password: erplocal
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave:
          url: jdbc:mysql://192.168.100.30:3306/erp4_cloud?useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
          username: erplocal
          password: erplocal
          driver-class-name: com.mysql.cj.jdbc.Driver
# 配置sql打印日志,开发环境需要,生产环境一般不需要
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

此时我们的相关配置就搞定了,可以来编写业务代码了,非常的简单。

使用多数据源

mybatis-plus官方说明书:

使用 @DS 切换数据源

SpringBoot整合mybatis-plus配置多数据源,整合Druid连接池及数据源监控_第2张图片

如何在同一个方法中切换数据源?

肯定有这种需求,在同一个方法中调不同的库来查询,这是就涉及数据源的切换了,其实很简单,只需两步就ok:

DynamicDataSourceContextHolder.push("slave");//slave即数据源名称
//中间执行你的业务sql
DynamicDataSourceContextHolder.clear();

整合Druid连接池及数据源监控

其实在上边的yml配置中已经整合了德鲁伊连接池了。
需要注意一点:如果需要访问德鲁伊的内置监控页面就必须要配如下配置:

 #设置访问druid监控页面的拦截路径及账号和密码,默认没有
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin

启动项目,访问http://localhost:8088/druid,就能跳转到监控页面了,我们可以看到数据源中存在我们配置的两个节点:
SpringBoot整合mybatis-plus配置多数据源,整合Druid连接池及数据源监控_第3张图片

你可能感兴趣的:(防踩坑专栏,mysql,java,spring,boot,mybatis,mybatis-plus)