Hikari是如何处理数据库连接中断问题的?
HikariCP 数据库连接中断处理逻辑
首先明确回答你的核心问题:是的,HikariCP 会主动检测中断的无效连接,关闭后创建新连接进行替代,具体处理逻辑分三类场景:
- 连接借出时的检测:当应用从连接池请求获取连接时,HikariCP 会默认执行连接有效性校验(JDBC4+驱动直接调用内置的
isValid()方法,低版本驱动可通过connectionTestQuery配置校验语句,校验超时时间由validationTimeout控制)。如果检测到连接已经中断失效,该连接会被立即标记为无效,从连接池中移除并关闭,HikariCP 会继续尝试返回下一个有效连接;若池内没有可用有效连接,会触发新连接创建逻辑,直到连接数达到maximumPoolSize上限。 - 空闲连接的后台检测:HikariCP 有常驻的后台 housekeeping 线程,会周期性扫描池内的空闲连接(扫描周期由
housekeepingPeriodMs控制,默认30秒)。对于空闲时间超过keepaliveTime阈值的连接,会主动发起有效性校验,检测到中断的连接会被直接清理关闭;如果当前池内连接数低于minimumIdle配置,会自动创建新的空闲连接补池,保证池内可用连接数量符合配置要求。 - 使用过程中连接中断的处理:如果连接已经被借出给应用、在业务使用过程中发生中断,HikariCP 不会主动感知到该异常,需要应用侧捕获JDBC抛出的连接相关异常(比如
SQLNonTransientConnectionException、ConnectionClosedException等)。此时应用调用connection.close()方法归还连接时,HikariCP 会识别到该连接为失效状态,不会放回连接池,而是直接关闭该连接,后续连接请求会补充新的连接。
注意:如果手动关闭了连接校验相关的配置(比如部分极端场景下为了性能关掉借出校验),HikariCP 可能会把失效连接返回给应用,所以生产环境不建议关闭默认的连接有效性校验逻辑。
内容的提问来源于stack exchange,提问作者Dariya
相关产品推荐
相关产品推荐

