0%

Spring Boot下集成Druid数据库连接池

日常开发过程中,我们很少会直接创建、关闭数据库连接,而是通过数据库连接池来获取数据库连接,即所谓的池化技术。这里重点介绍下在Spring Boot环境下如何集成Druid数据库连接池

abstract.jpeg

POM依赖

向POM添加Druid数据库连接池的Maven依赖

1
2
3
4
5
6
7
8
9
10
<dependencies>
...
<!-- Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
...
</dependencies>

基本配置

在Spring Boot配置文件中,添加Druid所需的相关配置项。具体配置项及释义见如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 1. 数据库配置

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/myMybatisDemo?useSSL=false
spring.datasource.druid.username=root
spring.datasource.druid.password=123456

# 2. Druid连接池配置

# 设置连接池隔离级别,1: Read Uncommitted未提交读,2: Read Committed提交读, 4: Repeatable Read重复读,8: Serializable串行化
spring.datasource.druid.default-transaction-isolation=4
# 初始化连接池大小,最小连接数,最大连接数
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 获取连接时最大等待时间,Unit:ms
spring.datasource.druid.max-wait=60000

# 验证连接有效性的查询SQL
spring.datasource.druid.validation-query=select 'x'

# 向连接池归还连接时,是否验证连接的有效性,true: 验证;false: 不验证
spring.datasource.druid.test-on-return=false
# 从连接池获取连接时,是否验证连接的有效性,true: 验证;false: 不验证
spring.datasource.druid.test-on-borrow=false
# 从连接池获取连接时,如果连接空闲时间超过time-between-eviction-runs-millis是否检测连接的有效性
# true: 验证;false: 不验证
spring.datasource.druid.test-while-idle=true

# Unit: ms,该配置有两个作用
# 1. Destroy线程检测连接是否需要物理关闭的间隔时间
# 2. 作为test-while-idle属性的判断依据
spring.datasource.druid.time-between-eviction-runs-millis=60000
# Destroy线程检测连接是否需要物理关闭时,对于超过最小连接数min-idle部分的连接,如果其空闲时间超过该值则该连接将被物理关闭,Unit:ms
spring.datasource.druid.min-evictable-idle-time-millis=300000

# 是否缓存PSCache(preparedStatement),Oracle等支持游标的DB推荐开启,MySQL下建议关闭
spring.datasource.druid.pool-prepared-statements=false
# 配置拦截器实现功能拓展,以逗号分隔。常见地,stat: 监控统计, wall: 防御SQL注入, slf4j:日志
spring.datasource.druid.filters=stat

统计监控

Druid提供了很多的功能拓展,其中最重要地莫过于对DB、SQL语句的监控统计。这里给出Druid监控所需的相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3. Druid监控配置

# 启用 Stat Filter拦截器,用于统计监控信息
spring.datasource.druid.web-stat-filter.enabled=true
# 拦截URL的匹配规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 排除不必要的URL
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# 启用 Stat View Servlet,用于展示Druid的监控信息
spring.datasource.druid.stat-view-servlet.enabled=true
# 是否允许清空统计信息
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 监控页面的URL、账号、密码
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=Aaron
spring.datasource.druid.stat-view-servlet.login-password=123456
# 监控页面的访问权限控制,IP白名单、黑名单,以逗号分隔
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.0.69
spring.datasource.druid.stat-view-servlet.deny=192.168.22.33,192.168.0.69

对于监控页面的访问权限控制,需要注意的是,如果一个IP同时存在于白名单、黑名单当中,则黑名单优先级高于白名单。例如对于上面的配置示例来说,只有127.0.0.1的IP可以访问监控页面。而192.168.0.69的IP则无法访问,因为其不仅存在于白名单也存在于黑名单中。至此就可以通过/druid路径来访问监控页面了,监控页面如下所示

figure 1.jpeg

请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝