SpringBoot Druid Dynamic动态数据源配置连接池

      

        最近项目需要配置2个数据库连接,一个负责门户图片查询连接,一个对接后台接口,初次配置没生效,于是查找了下原因,特此记录共勉。

       初次配置没生效原因是我把POM中  druid 给屏掉了。 当时因为baomidou的dynamic 里也有druid,简单的认为不需要druid了,直接屏掉才导致配置未生效。

正确配置如下,很简单。

一、配置依赖

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

<!-- 动态数据源 -->
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
   <version>2.5.4</version>
</dependency>

二、修改配置application_dev.yml

spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
        allow:
      web-stat-filter:
        enabled: true
    dynamic:
      druid: # 全局druid参数,单独数据源配置为空时取全局配置
        # 连接池的配置信息
        # 初始化大小,最小,最大
        initial-size: 1
        min-idle: 2
        maxActive: 8
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        master:
          url: jdbc:mysql://192.168.65.101:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull
          username: test
          password: 'test'
          driver-class-name: com.mysql.jdbc.Driver
          druid: #配置master 默认连接池参数
            # 连接池的配置信息
            # 初始化大小,最小,最大
            initial-size: 3
            min-idle: 3
            maxActive: 8
            # 配置获取连接等待超时的时间
            maxWait: 600000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            # 打开PSCache,并且指定每个连接上PSCache的大小
            poolPreparedStatements: true
            maxPoolPreparedStatementPerConnectionSize: 20
            # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            filters: stat,wall,slf4j
            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
        multi-datasource1:
          url: jdbc:mysql://192.168.65.101:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false
          username: test
          password: 'test'
          driver-class-name: com.mysql.jdbc.Driver
          druid: # 配置multi-datasource1 数据源连接池参数
            # 连接池的配置信息
            # 初始化大小,最小,最大
            initial-size: 2
            min-idle: 2
            maxActive: 2
            # 配置获取连接等待超时的时间
            maxWait: 600000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            # 打开PSCache,并且指定每个连接上PSCache的大小
            poolPreparedStatements: true
            maxPoolPreparedStatementPerConnectionSize: 20
            # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            filters: stat,wall,slf4j
            # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
重启后,通过netstat -ant|grep -v grep|grep 3306|wc -l  查看本机连接数据库个数(注意本机其它连接数据库的软件)。

到此配置完成,  之后就可以使用@DS 注解放在方法上指定数据源了(默认数据源不需要加注解)。

三、说明

1. druid是alibaba出品的连接池,也支持多数据源,但是要写配置类。

2. dynamic是baomidou 出的一个动态连接池包,默认使用druid连接池,也可配置使用其它如Hikari。

四、源码跟踪

1. 基于springboot入口:自动配置类,创建动态数据源

DynamicDataSourceAutoConfiguration

 2.  加载参数配置 

 

3. 创建druid数据源

 这里会进行替换,当独立数据源没有配置电接池参数时,会对null参数取全局配置进行替换。

 

如果大家在配置参数过程不生效或其它问题,可以打开DEBUG跟踪一下,以上祝顺利。 

  • 12
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值