2013-08-29 130 views
2

我在我的代碼中有幾個地方沒有正確關閉數據庫連接。這得到定期報告在catalina.out消息,如:org.apache.commons.dbcp.AbandonedTrace $ AbandonedObjectException:創建DBCP對象2013-08-29 02:55:00由以下代碼從未關閉。在接下來的幾個小時內,這些消息會在其他不封閉的連接中重複使用。Tomcat和JDBC連接池 - 報告未封閉連接的時機

通過查看catalina.out中的其他信息,我可以看到這些消息在上午7:40左右打印到catalina.out。我見過其他情況,第二天在catalina.out中報告了這些情況。我的問題是,什麼決定了這些消息何時打印到catalina.out?這是如何工作的?

回答

4

DBCP是開源的,所以你可以自己查看代碼並找出答案。 DBCP檢查廢棄連接的方式是協作垃圾收集的一種形式。當連接從連接池中檢出時,它首先檢查被放棄的連接並清理它們。

因此,如果幾個小時內沒有請求新連接,則不會刪除已放棄的連接。當(例如,在工作日開始時)從池中請求連接時,它將首先移除所有放棄的連接。

如果您查看borrowObject()的代碼,根據配置,它將調用removeAbandoned(),這反過來會撤銷並記錄廢棄的連接。