环境:springboot3、jdk17
1.HikariCP与Druid的对比
HikariCP 与 Druid都是常用的数据库连接池实现,各有各的优点;
HikariCP | Druid | |
---|---|---|
性能 | 目前性能最好的数据库连接池 | 弱于HikariCP |
功能 | 功能简单 | 功能丰富,提供了SQL执行日志、慢查询日志、监控、数据库统计等功能 |
易用性 | 配置简单 | 配置较多,适合需要复杂连接池管理的项目 |
连接池的生命周期 | 启动、初始化与关闭较快 | 启动时间较长 |
资源消耗 | 资源消耗非常低 | 稍高于HikariCP |
- HikariCP专注于性能,适合需要高效数据库连接池的项目;
- Druid提供了更丰富的功能和监控,适用于需要数据库管理分析功能的企业级应用;
2. HikariCP与Druid的使用
2.1 HikariCP的使用
由于HikariCP是springboot的默认数据库连接池,不需要单独添加依赖,只需配置相关配置就行;
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&autoReconnect=trueusername: xxxxpassword: xxxxhikari:connection-timeout: 30000 # 等待连接池分配连接的最大时间(毫秒),超过这个时长还没有可用的连接,则会抛出SQLExceptionminimum-idle: 5 # 最小连接数maximum-pool-size: 20 # 最大连接数auto-commit: true # 自动提交idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则会被释放(retired)pool-name: DataSourceHikariCP # 连接池的名字max-lifetime: 3600000 # 连接池的最大生命时长(毫秒),超时则会被释放(retired)connection-test-query: SELECT 1
2.2 Druid的使用
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.20</version>
</dependency>
配置
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghaiusername: xxxxpassword: xxxxdruid:# 初始化连接池的连接数量initial-size: 5# 最小空闲连接数min-idle: 5# 最大活跃连接数max-active: 20# 获取连接等待超时的时间max-wait: 30000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 30000# 验证连接的 SQL 查询validation-query: SELECT 1# 是否在空闲时检测连接test-while-idle: true# 是否在获取连接时检测连接test-on-borrow: true# 是否在返回连接时检测连接test-on-return: false# 是否缓存 preparedStatementpool-prepared-statements: true# 每个连接的最大缓存 prepared statement 数量max-pool-prepared-statement-per-connection-size: 20# 配置监控统计拦截的 filtersfilters: stat,wall,log4j# 配置 stat 拦截器的属性stat:merge-sql: trueslow-sql-millis: 5000
- filters:配置为 stat,wall,log4j,表示启用统计、防火墙和日志过滤器。
- stat:配置统计拦截器的属性,merge-sql 用于合并 SQL 语句,slow-sql-millis 用于定义慢 SQL 的阈值。
-
小心 wall 过滤器,它是一个安全性过滤器,可能会对某些 SQL 查询造成限制。如果你不需要此过滤器来加强安全性,可以考虑去掉,避免不必要的性能开销。