2

有没有办法在设定的超时期限后关闭 JDBC 连接?这些连接是在 GenericObjectPool 中创建的。我知道池可以关闭池中的空闲连接,但是那些被认为是活动的连接呢?如果有人不调用 close(),我正在尝试控制连接泄漏。从我读到的唯一方法可能是在服务器上设置超时时间,但我希望在 Java 中找到一种方法。谢谢!

4

2 回答 2

1

我使用的是旧的 Apache 公用池,但我切换到了新的 Apache Tomcat 池 这实际上具有在超时后删除连接的功能。

removeAbandoned - (boolean) 标志,如果放弃的连接超过 removeAbandonedTimout,则删除它们。如果设置为 true,则如果连接的使用时间超过 removeAbandonedTimeout,则该连接被视为已放弃并有资格删除。将此设置为 true 可以从无法关闭连接的应用程序中恢复数据库连接。另请参阅 logAbandoned 默认值为 false。

于 2012-09-17T13:37:29.787 回答
1

我同意 Peter Lawrey 的观点,即我会确保始终关闭连接。但是,如果我仍然必须确保连接已关闭(如果有人从池中取出它并忘记返回它),我会这样做:

  1. 装饰池返回的 java.sql.Connection。
  2. 在构造函数中创建一个计时器并将其设置为配置的持续时间,以容忍活动连接。
  3. 如果用户在计时器触发之前对其调用 close,我将取消计时器并将连接返回到池。
  4. 如果计时器在用户关闭连接之前触发,我会将连接返回到池中并使装饰连接无效,以便进一步调用将抛出IllegalStateException.
于 2012-09-13T14:28:03.663 回答