SpringBoot 动态数据源 + druid

7 阅读2分钟

Background

在 SpringBoot 集成多数据源时,经常用 MyBatis Plus 配套的 dynamic-datasource 库

druid 是流行的高性能数据库连接池,两者搭配使用时,需要注意 druid 的配置方式

相关配置的地方有三处

  1. spring.datasource.druid
  2. spring.datasource.dynamic.druid
  3. spring.datasource.dynamic.datasource..druid

单数据源的简单配置

依赖 pom.xml

SpringBoot 版本:3.2.5

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

数据源配置 application.yaml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
    druid:
      socketTimeout: 60000
      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
	  # web 层统计
      webStatFilter:
        enabled: true
      # web 监控页面
      statViewServlet:
        enabled: true
        allow:
        url-pattern: /druid/*
        login-username: dev
        login-password: dev123
      # 其他 filter
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true

集成 dynamic-source

依赖 pom.xml

SpringBoot 版本:3.2.5

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-3-starter</artifactId>
	<version>1.2.21</version>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
	<version>4.5.0</version>
</dependency>

集成 dyanmic-source + druid,配置方法

  1. webStatFilter​,statViewServlet 依然配置在 spring.datasource.druid

    因为 DruidDynamicDataSourceConfiguration​ @Import 了 DruidStatViewServletConfiguration​ 和 DruidWebStatFilterConfiguration

  2. 其他配置在 spring.datasource.dynamic.druid 或每个数据源下面:spring.datasource.dynamic.datasource..druid

    可配置项参考 com.baomidou.dynamic.datasource.creator.druid.DruidConfig

数据源配置 application.yaml

spring:
  datasource:
    dynamic:
      druid:
        socketTimeout: 60000
        initialSize: 5
        minIdle: 10
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        maxEvictableIdleTimeMillis: 900001
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        filters: stat
        stat:
          log-slow-sql: true
          slow-sql-millis: 15000
          merge-sql: true
        wall:
          multi-statement-allow: true
      primary: business_oracle
      strict: true
      datasource:
        business_oracle:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
          username: root
          password: root
          type: com.alibaba.druid.pool.DruidDataSource
          druid:
            initialSize: 6
            minIdle: 100
            maxActive: 200
            maxWait: 60000
    druid:
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        allow:
        url-pattern: /druid/*
        login-username: dev
        login-password: dev123