Hikari如何回收连接?

时间:2015-11-15 14:24:05

标签: java spring hibernate tomcat8 hikaricp

我请大家在HikariCP文档中找不到答案。鉴于我设置了以下池参数:

minimumIdle 1
idleTimeout 10 minutes
maxLifeTime 20 minutes

当我的应用程序在夜间闲置(没有人请求)时,我希望Hikari在连接的最后一个请求后10分钟关闭每个连接,在最后一个连接关闭后创建一个新连接(并将其保存在池中) ),然后每20分钟关闭并重新创建此空闲连接。 我理解得对吗?

事实是,在我的应用程序闲置一段时间后,我看到(通过下一个请求)以下异常:

WARN  c.z.hikari.proxy.ConnectionProxy - Connection oracle.jdbc.driver.T4CConnection@3c63f80e <POOL_NAME> marked as broken because of SQLSTATE(08003), ErrorCode(17008).
java.sql.SQLRecoverableException: Closed Connection

连接可能已被Oracle关闭,无法使用。我会尝试使用上面的配置来避免这种情况。另一点是,我不明白为什么我从池中获得一个封闭的连接。这应该永远不会发生,因为Hikari在返回之前测试了连接的状态......

注意:我不是数据库的所有者,我无法配置它或让它重新配置以满足我的需要。我也无法访问其配置。

我们的设置是Spring 4.1.6,Hibernate 4.3.7 with JPA 2.1 API,Hikari 2.1.0

2 个答案:

答案 0 :(得分:2)

您对池参数的理解是正确的。 Oracle实例的空闲超时可能短于10分钟。您可以做的一件事是为com.zaxxer.hikari包启用DEBUG级别日志记录。您将获得有关HikariCP内部发生的更多信息,而不会太嘈杂。

您可以将日志发布为issue on Github,我们会对其进行审核。

答案 1 :(得分:0)

我们面临着几乎相似的问题并解决了它。我向HikariCP团队报告了这个问题。这是链接:https://github.com/brettwooldridge/HikariCP/issues/683