Spring Boot (四): Druid 连接池密码加密与监控
在上一篇文章《Spring Boot (三): ORM 框架 JPA 与连接池 Hikari》 我们介绍了 JPA 与连接池 Hikari 的整合使用,在国内使用比较多的连接池还有一个是阿里开源的 Druid 。本篇文章我们就来聊一聊 Druid 的一些使用姿势。
1. Druid 是什么?
我们先来看一下官方的回答:
Druid 是 Java 语言中最好的数据库连接池。 Druid 能够提供强大的监控和扩展功能。
说 Druid 是 Java 语言中最好的数据库连接池,这个笔者个人觉得有些吹牛了,至少在性能上和我们上一篇介绍的 Hikari 是没得比的,相关的性能测试在网上能找到很多,笔者这边就不列举了。但是 Druid 在其他的一些方面就做的比较出色了,功能非常丰富:
- 可以监控数据库访问性能, Druid 内置提供了一个功能强大的StatFilter插件,能够详细统计 SQL 的执行性能,这对于线上分析数据库访问性能有帮助。
- 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。 DruidDruiver 和 DruidDataSource 都支持 PasswordCallback 。
- SQL 执行日志, Druid 提供了不同的 LogFilter ,能够支持 Common-Logging 、 Log4j 和 JdkLog ,你可以按需要选择相应的 LogFilter ,监控你应用的数据库访问情况。
- 扩展 JDBC ,如果你要对 JDBC 层有编程的需求,可以通过 Druid 提供的 Filter 机制,很方便编写 JDBC 层的扩展插件。
2. Spring Boot 应用中如何使用
目前 Druid 官方为我们提供了两种使用依赖方式,一种是基于传统 Java 工程提供的依赖包, maven 坐标如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.20</version> </dependency>
还有一种是基于 Spring Boot 提供的依赖包, maven 坐标如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.20</version> </dependency>
下面的这种依赖包除了包含了上面的那种 Druid 基础包,还包含了 Spring Boot 自动配置的依赖包以及 sl4j-api ,我们在 Spring Boot 中使用 Druid ,当然是推荐各位读者使用第二种方式引入依赖。
3. 工程实战
3.1 创建父工程 spring-boot-jpa-druid
父工程 pom.xml 如下:
代码清单:spring-boot-jpa-druid/pom.xml
***
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="upload/201909251506243820.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*' # 配置DruidStatViewServlet stat-view-servlet: # 是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全) enabled: true url-pattern: '/druid/*' # IP白名单(没有配置或者为空,则允许所有访问) allow: 127.0.0.1,192.168.0.1 # IP黑名单 (存在共同时,deny优先于allow) deny: 192.168.0.128 # 禁用HTML页面上的“Reset All”功能 reset-enable: false # 登录名 login-username: admin # 登录密码 login-password: admin
- 相关配置的含义已经写在注释中了,这里有一点要讲一下,当我们要配置统计信息(包括监控信息)
time-between-log-stats-millis
输出至日志中,合并多个DruidDataSource的监控数据use-global-data-source-stat
不可开启,否则启动会报错。 spring.datasource.druid.filters
:因为 Druid 的扩展是通过 Filter 插件的形式来开启的,这里我们开启了