druid作为数据库连接池的⼏种配置总结,通过debug去跟配置
结果
⽬录
整篇⽂章基于SpringBoot2.2.6编写。不同SpringBoot配置存在某些差异,后⾯会提。
检测⽅法--后⾯的测试结果,debug结果都是基于该测试类测试。
作⽤:⽤于检测数据库连接池是否⽣效,属性是否注⼊等。
测试类如下,通过打断点测试
@SpringBootTest
public class DataSourceTest {
@Autowired
DataSource dataSource;
@Test
void contexts() throws SQLException {
//测试数据源、通过数据源拿到的连接种类
System.out.Class());
Connection connection = Connection();
System.out.println(connection);
connection.close();
}
}
此⽅法每次可以根据输出结果观察到数据源是哪种,连接是哪种
测试属性是否注⼊,断点位置如下
通过debug启动,然后查看dataSource的属性,对于我,⼀般只要查看initialSize=0就是未注⼊成功
下⾯进⼊正题
⼀、数据库默认的数据连接池
spring:
#数据源配置,使⽤默认的数据库连接池
datasource:
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/essm_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: essm_dev
password: essm123456
注意:如果遇到什么错,基本上是url:jdbc那个属性后⾯的配置没有写正确,时区啥的
进⾏测试,通过test打印数据源类,数据连接类型如下图
SpringBoot2.2.6默认是使⽤的是HikariDataSource作为数据库连接池
⼆、纯yml配置druid阿⾥巴巴数据库连接池(强烈推荐⽅式,我也是这么配置的)
依赖:使⽤strarer启动器作为依赖,便可以实现纯yml配置
<!--数据源配置,纯yml配置,结合springboot的druid_start启动器实现-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
yml配置信息如下:
spring:
#数据源配置,纯yml配置
datasource:
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/essm_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: essm_dev
password: essm123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 初始化⼤⼩,最⼩,最⼤活跃数
initial-size: 8
min-idle: 8
max-active: 20
# 配置获取连接等待超时的时间,单位是毫秒
max-wait: 60000
# 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 300000
validation-query: SELECT 1
springboot是啥test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的⼤⼩
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
#配置监控统计拦截的filters,去掉后监控界⾯sql⽆法统计,'wall'⽤于防⽕墙,slf4j(⽤log4j需要额外导⼊依赖,版本不同,这⾥也可以去掉slf4j)      filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connection-properties: Sql=true;druid.stat.slowSqlMillis=5000
# 配置监控服务器
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: druid
login-password: druid123
debug测试结果:
1、属性都正常注⼊,成功
2、输⼊结果拿到的是阿⾥巴巴druid数据库⾃动配置starater的连接池和连接
3、启动应⽤程序后--不是测试啦,登录localhost:8080/druid出现数据库监测界⾯
4、输⼊yml配置⽂件的账户密码,druid,druid123,登录成功,结束
三、需要借助配置⽂件,Java类来注⼊属性的配置
导⼊的是普通的阿⾥巴巴druid依赖,这⾥不⽀持yml纯配置,不是starter,检测就是debug你会发现数据注⼊不成功。依赖:
<!-- 加⼊阿⾥巴巴连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
还是⽤原来的yml配置⽂件,未修改
debug测试结果
1、属性对不上,注⼊失败
2、数据库连接池是druid,拿到的连接是普通的数据库连接
难道是yml配置问题?修改⼀下,将yml配置的druid节点去掉再次测试
新的配置⽂件
spring:
#禁⽤thymeleaf
thymeleaf:
cache: false
#数据源配置,配置⽂件DruidConfig配置
datasource:
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/essm_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false    username: essm_dev
password: essm123456
type: com.alibaba.druid.pool.DruidDataSource
#druid:
# 初始化⼤⼩,最⼩,最⼤活跃数
initial-size: 8
min-idle: 8
max-active: 20
# 配置获取连接等待超时的时间,单位是毫秒
max-wait: 60000
# 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的⼤⼩
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
#配置监控统计拦截的filters,去掉后监控界⾯sql⽆法统计,'wall'⽤于防⽕墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connection-properties: Sql=true;druid.stat.slowSqlMillis=5000
# 配置监控服务器
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: druid
login-password: druid123
测试结果还是⼀样,这⾥不贴结果
其实是要⾃⼰编写属性配置⽂件,进⾏注⼊
yml配置⽂件