Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hikari如何回收连接?_Java_Spring_Hibernate_Tomcat8_Hikaricp - Fatal编程技术网

Java Hikari如何回收连接?

Java Hikari如何回收连接?,java,spring,hibernate,tomcat8,hikaricp,Java,Spring,Hibernate,Tomcat8,Hikaricp,请大家给我一个在HikariCP文件中找不到的答案。假设我设置了以下池参数: minimumIdle 1 idleTimeout 10 minutes maxLifeTime 20 minutes 当我的应用程序在夜间保持空闲(没有人发出请求)时,我希望Hikari在连接的最后一个请求后10分钟关闭每个连接,在最后一个连接关闭后创建一个新连接(并将其保留在池中),然后每20分钟关闭并重新创建此空闲连接。 我理解对了吗 事实上,在我的应用程序上空闲一段时间后,我看到(在下一个请求中)以下异常:

请大家给我一个在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
WARN c.z.hikari.proxy.ConnectionProxy-Connection oracle.jdbc.driver。T4CConnection@3c63f80e由于SQLSTATE(08003)、错误代码(17008)而标记为已断开。
java.sql.SQLRecoverableException:关闭的连接
该连接可能已被Oracle关闭,无法使用。我将尝试使用上面的配置来避免这种情况。另一点是,我不明白为什么我从池中获得了一个闭合连接。这永远不会发生,因为Hikari在返回连接之前会测试连接的状态

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


我们的设置是Spring 4.1.6、Hibernate 4.3.7和JPA 2.1 API、Hikari 2.1.0。您对池参数的理解是正确的。Oracle实例的空闲超时可能短于10分钟。您可以做的一件事是为
com.zaxxer.hikari
包启用调试级日志记录。您将获得更多关于HikariCP内部情况的信息,而不会太吵


请随意将日志作为日志发布,我们将查看它。

我们面临着几乎类似的问题并解决了它。我向HikariCP团队报告了这个问题。这是链接:

好的,我会看看是否能得到有用的日志。你对hikari给我一个封闭的关系有什么看法?因为我使用的是Oracle11g上最后一个JDBC驱动程序,所以isValid()应该可以工作。当Hibernate试图在关闭的连接上执行查询时,我看到了这个非常可爱的SQLException。因此,我最终从池中获得了一个关闭的连接。我非常确定Oracle驱动程序正确地实现了JDBC4 isAlive()API,但是您可以尝试配置connectionTestQuery。如果配置了,HikariCP将使用该选项。注意:还要确保Spring和/或Hibernate没有缓存会话中的连接(不知何故)——可能是一个设置。我得到了更多信息。应用程序启动时出现连接泄漏。甚至在用户交互产生的第一个请求之前。所以我们必须对此进行调查。当我有更多信息时,我会进一步通知你。感谢hikari数据源统计记录。:-)您可以尝试
leakDetectionThreshold
来查明泄漏源。请通过添加更多信息来增强您的回答