目录
引言
HikariCP是SpringBoot默认连接池,也是java常用的数据库连接池之一,如果基础网络环境和数据库端设置了空闲连接释放,特别是探活探测需要正常配置,否则会导致应用下次从连接池中拿到异常连接而报错失败:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
注:
参数是在以下环境测试验证:
jdk 8
HikariCP 4.0.3
参数说明
1、基本配置
minimum-idle
默认值:与 maximumPoolSize 相同。
最小空闲连接数(minimumIdle),【官方建议不要设置此值】而是允许 HikariCP 充当固定大小的连接池。有新增连接,则会新增空闲连接,至少保留当前配置的空闲连接。
maximum-pool-size
默认值:10
允许达到的最大连接数(maximumPoolSize)
connection-timeout
默认值:30000(30 秒)
等待来自池的连接的最大毫秒数(connectionTimeout),如果在没有可用连接的情况下超过此时间,将引发 SQLException。可接受的最低连接超时为 250 毫秒。
2、连接生命周期
idle-timeout
默认值:600000(10 分钟)
连接空闲的最长时间(idleTimeout)。控制允许连接在池中空闲的最长时间。必须要 minimumIdle 小于 maximumPoolSize 才生效,大于 minimumIdle 的空闲连接才会被回收。设置0 表示永远不会从池中删除空闲连接。允许的最小值为 10000 毫秒(10 秒)。
max-lifetime
默认值:1800000(30 分钟)
空闲连接的最大生命周期(maxLifetime)。0 表示没有最大生命周期(无限生命周期),当然取决于 idleTimeout 设置。允许的最小值为 30000 毫秒(30 秒)。
3、连接测试,探活
keep-alive-time
默认值:0(禁用)
最小值为 30000 毫秒(30 秒)
探活周期(keepaliveTime),连接池定期对池里的连接做数据库的测试操作,只对空闲连接做探活操作,非空闲的连接不做探活。
connection-test-query
默认值:无,可设置select 1
提供连接之前执行的查询(connectionTestQuery),以验证与数据库的连接是否仍然存在,【官方建议不要设置此值】,针对不支持JDBC4 Connection.isValid() API的“遗留”驱动程序
auto-commit=true
开启自动提交
pool-name=MyHikariCP
连接池名称
注:
注意HikariCP版本不能过低,比如使用HikariCP 3.2.0 不支持配置探活。
maxlifetime从160秒改成1600秒,应用日志会提示possibly consider using a shorter maxlifetime value,升级HikariCP到最新版本后正常。
总结
- 对于hikariCP的探活参数,只需要如下两个:
(1)max-lifetime=1600000
单位:毫秒
最大存活时间,需要小于MySQL参数wait_timeout值
(2)keep-alive-time=90000
单位:毫秒
探活周期,需要配置小于MySQL参数wait_timeout值
(3)HikariCP连接池版本一定要使用最新,keep-alive-time探活参数才能生效,java 7和java 6较老,不建议使用
Java 11最新是HikariCP 5.0.1
Java 8 最新是HikariCP 4.0.3
Java 7 最新是HikariCP 2.4.13
Java 6 最新是HikariCP 2.3.13