众所周知,springboot2项目采用HikariCP连接池,这款“史上最快连接池”就不多赘述。springboot2项目系统上线后,观察日志发现一个警告如下:
WARN com.zaxxer.hikari.pool.PoolBase - Retail_HikariCP - Failed to validate connection com.mysql.jdbc.JDBC4Connection@355cd37b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
警告内容是建议使用maxLifetime值设小一些,这说明配置文件存在一定问题。 关于HikariCP连接池一些简要配置说明如下:
| 配置项 | 描述 | 构造器默认值 |
|---|---|---|
| connectionTimeout | 等待来自池的连接的最大毫秒数 | 30000 |
| idleTimeout | 连接允许在池中闲置的最长时间 | 600000 |
| maxLifetime | 池中连接最长生命周期 | 1800000 |
按照警告提示,把maxLifetime值减小,从1800000修改成600000,与idle-timeout数值一致。
## 数据库配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.u```rl = jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
## Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=5
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=600000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=10
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接池母子
spring.datasource.hikari.pool-name=testHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=600000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
但是当项目启动时,又报了一个警告:
WARN com.zaxxer.hikari.HikariConfig - Retail_HikariCP - idleTimeout is close to or more than maxLifetime, disabling it.
出现上面情况是因为idle-timeout有规则,必须要idle-timeout+1秒>max-lifetime且max-lifetime>0; 出了两次警告,对于HikariCP连接池的问题理解更加深刻。把maxLifetime值调整到比idle-timeout大一些,设置为800000 (13分钟), 根据项目情况最终优化配置文件如下:
## 数据库配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.u```rl = jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
## Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=5
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=600000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=10
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接池母子
spring.datasource.hikari.pool-name=testHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=800000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
优化之后上线,警告再也没发生。每次上线一定要注意细节,细节全是知识点。