Tomcat和JDBC连接池 - 报告未关闭连接的时间

时间:2013-08-29 21:10:45

标签: jdbc apache-commons-dbcp

我的代码中有一些地方没有正确关闭数据库连接。这会在catalina.out中定期报告,其中包含以下消息:org.apache.commons.dbcp.AbandonedTrace $ AbandonedObjectException:由以下代码创建的DBCP对象2013-08-29 02:55:00从未关闭。在接下来的几个小时内,这些消息会针对其他未闭合的连接重复多次。

通过查看catalina.out中的其他信息,我可以看到这些消息在上午7:40左右打印到catalina.out。我已经看到了其他情况,这些情况会在catalina.out第二天报告。我的问题是,什么决定何时将这些消息打印到catalina.out?这是如何工作的?

1 个答案:

答案 0 :(得分:4)

DBCP是开源的,因此您可以自己查看代码并找出答案。 DBCP检查放弃连接的方式是协作垃圾收集的一种形式。从连接池中检出连接时,它首先检查已放弃的连接并清除它们。

因此,如果几个小时内未请求新连接,则不会删除已放弃的连接。当(例如在工作日开始时)从池请求连接时,它将首先删除所有被放弃的连接。

如果您查看borrowObject()的代码,则会根据配置调用removeAbandoned(),而{{3}}将撤消并记录已放弃的连接。