简介
Druid是阿里巴巴开源的数据库连接池,号称是Java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。
优点
- 可以监控数据库访问性能,Druid内置提供了一个功能强大的
StatFilter
插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 - 替换DBCP和C3P0,Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
- 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDriver和DruidDataSource都支持PasswordCallback。
- SQL执行日志,Druid提供了不同的
LogFilter
,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 - 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.13-SNSAPSHOT</version>
</dependency>
这里使用的是SpringBoot整合版的Druid,使用这个Druid的好处是SpringBoot帮我们做了集成,不需要我们进行太多的配置,开箱即用。
配置Druid数据源
1、启用Druid数据源
SpringBoot 2.0 以上默认使用的是Hikari数据源,所以要启用Druid数据源,需要手动进行启用,在application.yml文件添加以下配置。
spring:
datasource:
username: root #用户名
password: 123456 # 密码
url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 # 数据库连接串
driver-class-name: com.mysql.cj.jdbc.Driver # mysql连接驱动
type: com.alibaba.druid.pool.DruidDataSource # 启用Druid数据源 @1
druid:
max-active: 20 # 最大连接池数量 @2
min-idle: 10 # 最小连接池数量 @3
@1:启用Druid数据源
@2:设置最大连接池数量
@3:设置最小连接池数量
2、测试
启动应用,可以在控制打印中看到是否启用Druid数据源,如下:
com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
如果在控制台有以上的输出,则表明已成功启用Druid。
配置Druid监控
基于Druid的Filter-Chain扩展机制,Druid提供了3个非常有用的具有监控功能的Filter:StatFilter
用于统计监控信息WallFilter
基于SQL语义分析来实现防御SQL注入攻击LogFilter
用于输出JDBC执行的日志。
1、配置监控信息
在application.yml文件中添加需要进行监控的Filter,值分别为:stat, wall, log4j2,配置如下:
spring:
datasource:
username: root #用户名
password: 123456 # 密码
url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 # 数据库连接串
driver-class-name: com.mysql.cj.jdbc.Driver # mysql连接驱动
type: com.alibaba.druid.pool.DruidDataSource
druid:
max-active: 20
min-idle: 10
filters: stat,wall,log4j2 # 设置监控功能
web-stat-filter:
enabled: true
url-pattern: /*
stat-view-servlet:
login-username: admin # 设置访问druid监控页的账号
login-password: 123456 # 设置访问druid监控页的密码
url-pattern: /druid/* # 设置访问druid监控页的URL
enabled: true # 是否开启监控页访问
use-global-data-source-stat: true # 合并多个监控数据
filter:
stat:
merge-sql: true
slow-sql-millis: 500 # 慢查询
stat
:用于统计监控信息wall
: 基于SQL语义分析来实现防御SQL注入攻击log4j2
: 用于输出JDBC执行的日志。
2、测试
配置完成后,启动应用,访问http://localhost:80/druid/,即可看到以下页面:
配置详解
配置 | 说明 |
spring.datasource.druid.initial-size | 连接池初始数量 |
spring.datasource.druid.min-idle | 最小连接池数量 |
spring.datasource.druid.max-active | 最大连接池数量 |
spring.datasource.druid.max-wait | 获取连接时最大等待时间,单位毫秒 |
spring.datasource.druid.test-while-idle | 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 |
spring.datasource.druid.time-between-eviction-runs-millis | 既作为检测的间隔时间又作为testWhileIdel执行的依据 |
spring.datasource.druid.min-evictable-idle-time-millis | 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接 |
spring.datasource.druid.test-on-borrow | 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true |
spring.datasource.druid.test-on-return | 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true |
spring.datasource.druid.exception-sorter | 当数据库抛出不可恢复的异常时,抛弃该连接 |
spring.datasource.druid.pool-prepared-statements | 是否缓存preparedStatement,mysql5.5+建议开启 |
spring.datasource.druid.max-pool-prepared-statement-per-connection-size | 当值大于0时poolPreparedStatements会自动修改为true |
spring.datasource.druid.filters | 配置扩展插件,可选值为:stat, wall |
druid.filter.stat.mergeSql | 打开mergeSql功能 |
druid.filter.stat.slow-sql-millis | 慢SQL记录 |
spring.datasource.druid.use-global-data-source-stat | 合并多个DruidDataSource的监控数据 |
spring.datasource.druid.stat-view-servlet.login-username | 设置访问druid监控页的账号 |
spring.datasource.druid.stat-view-servlet.login-password | 设置访问druid监控页的密码 |
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/429