2

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

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

4

1 回答 1

4

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

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

如果您查看 的代码borrowObject(),根据它将调用的配置removeAbandoned(),这反过来将撤销并记录放弃的连接。

于 2013-08-30T09:06:36.750 回答