赞
踩
最近项目需要配置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跟踪一下,以上祝顺利。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。