unreturnedConnectionTimeout

unreturnedConnectionTimeout

假设我有以下代码:

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:仅调试:过期的资源检出堆栈跟踪”。

我的代码片段中的catch块捕获了此异常吗?通过调试我的应用程序,看来答案是否定的。
有什么办法可以捕捉到该异常吗?

最佳答案

不,您不可能捕获到异常。您看到的“异常”从未抛出。它是由debugUnreturnedConnectionStackTraces生成的,然后被要求转储它的堆栈跟踪,以便向您显示泄漏Connection的代码路径。

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

10-05 21:49