提问者:小点点

雄猫 JDBC 连接池删除放弃不起作用


我们有一个使用Tomcat JDBC连接池的应用程序,它与Spring Boot和Hibernate一起配置。连接池本身运行良好(我已经能够通过池提供的JMX MBean验证这一点),但特定的参数似乎不起作用。

根据Tomcat文档,如果“removeAbandoned”设置为true,则如果连接的使用时间超过removeAbandonedTimeout,则该连接被视为已放弃,可以删除。因此,我将“removeAbandoned”设置为true,将“removeAbandonedTimeout”设置为20(秒)。我已经能够使用JMX MBean验证这两个参数是否已经正确设置。

为了测试被放弃的连接是否真的被删除,我手动锁定了一个数据库表,并在几个浏览器选项卡上打开了访问这样一个表的页面。每个都打开了一个到我的数据库的新连接,因为我能够使用JMX MBean和使用< code > show status where ` variable _ name `= ' Threads _ connected '进行验证;。然而,20秒过后,这些连接都没有被删除。我甚至等了更长的时间,直到我打开桌子,他们什么也没发生。

根据我从Tomcat文档中了解到的,这些连接都应该可以删除,因为它们都在使用中并且持续了20秒以上。那这是怎么回事?

我的其他参数是maxActive="75"、minIdle="5"、maxIdle="5"、startalSize="3"、validationQuery="SELECT 1"和testWhileIdle="true"。我应该澄清一下,当表被锁定时,所有这些连接都保持活动状态(没有一个再次空闲,也没有一个从池中删除)。

编辑:更正。实际上,第一个连接正在被删除,只是没有删除后续连接。当“suspectTimeout”设置为 20 且“removeAbandoned”设置为 false 时,“logAbandoned” 会正确显示所有可疑连接。


共1个答案

匿名用户

也有同样的问题。请确保您还设置了以下参数:

  1. removeAbunded=true
  2. 放弃WhenPercentageFull=0(0是默认值,但您可以检查是否显式设置此值)