C3p0 - UnreturnedConnectionTimeout在C3p0抛出时不会破坏流控制

时间:2016-10-16 12:44:49

标签: java hibernate jdbc database-connection c3p0

假设我有以下代码:

try {
    //dao.querier behind the Scenes is using 
    //A Hibernate query with C3p0
    List<?> newItems = dao.querier(true);
} catch (Exception e) {
    e.printStackTrace();
} 

对方法dao.querier的调用使用C3p0和Hibernate。配置属性unreturnedConnectionTimeout:

unreturnedConnectionTimeout=300

当我确实有一个没有返回池的连接时,c3p0说 - “java.lang.Exception:DEBUG ONLY:Overdue resource check-out stack trace”。

我的代码段中的catch块是否捕获到此异常。通过调试我的应用程序,似乎答案是否定的。 有没有办法可以抓住这个例外?

1 个答案:

答案 0 :(得分:1)

不,你无法抓住异常。 &#34;例外&#34;你看到从未被抛出。它是由debugUnreturnedConnectionStackTraces生成的,然后被要求转储它的堆栈跟踪,以便向您显示泄露Connection的代码路径。

unreturnedConnectionTimeout存在于close()已泄露的连接(并帮助您修复泄漏)。这些连接应该不再可以在任何堆栈内或任何try / catch块中访问。如果将unreturnedConnectionTimeout设置为太小的值,以便在应用程序仍在使用它时由于设置而关闭Connections,则当应用程序尝试使用Connections后,您将看到普通的异常已关闭。