【问题标题】:C3p0 - UnreturnedConnectionTimeout does not break the flow control while being thrown by C3p0C3p0 - UnreturnedConnectionTimeout 在被 C3p0 抛出时不会破坏流控制
【发布时间】:2017-02-25 11:49:01
【问题描述】:

假设我有以下代码:

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”。

这个异常是否被我的代码 sn-p 中的 catch 块捕获了?通过调试我的应用程序,似乎答案是否定的。 有什么办法可以捕捉到这个异常吗?

【问题讨论】:

    标签: java hibernate jdbc database-connection c3p0


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2012-04-17
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多