【问题标题】:c3p0 unreturnedConnectionTimeout not throwing exceptionc3p0 unreturnedConnectionTimeout 不抛出异常
【发布时间】:2017-05-05 16:12:54
【问题描述】:

我们有一个使用 c3p0 库的服务,我们添加了这个属性 unreturnedConnectionTimeout 以确保 unreturnedconnections 超时,但显然 c3p0 没有抛出异常,而是在我将 debugUnreturnedConnectionStackTraces 属性设置为 true 时打印异常堆栈跟踪。

在这种情况下,我们正在等待 c3p0 库的服务线程因为没有抛出异常而永远等待连接。

你能给我们一个解决方案如何处理这种情况吗?

【问题讨论】:

    标签: c3p0


    【解决方案1】:

    你误会unreturnedConnectionTimeout

    unreturnedConnectionTimeout 不会抛出异常。如果设置得当,它只有在你泄露了一个连接时才会起作用。某些客户端已签出连接,但未能重新签入。未发生异常。没有客户端受到此影响,除非是间接影响,因为现在可供签出的连接更少。 c3p0 只是杀死未返回的连接。没有人可以通知。

    如果您有无限期等待连接的客户端,这听起来就像您有一个连接泄漏没有被unreturnedConnectionTimeout 清理,或者更有可能的是,您发现连接等待的时间太长了,只要您设置的超时时间。

    假设您将debugUnreturnedConnectionStackTraces 设置为true,您应该查看那些被记录的堆栈跟踪。这些堆栈跟踪不代表异常(即使它们可能打印为“DEBUG”异常)——但它们向您显示了检出从未返回的连接的代码路径。修复它,修复连接泄漏,所有问题都会消失。查看 Connection 是如何被签出的,在您的代码中找到它,并确保任何如此签出的 Connection 都不会在某个 finally 块中关闭,或者更容易通过 @987654321 发布 Java 7 @。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2014-03-04
      • 2015-05-01
      • 1970-01-01
      • 2014-12-23
      • 2012-01-24
      • 2013-05-24
      • 2010-12-09
      • 2015-12-13
      相关资源
      最近更新 更多