我是 c3p0 的作者,也是你引用的段落的作者。
unreturnedConnectionTimeout正是它的名称和文档状态:未返回连接的超时。它是根据用户反馈不情愿地实施的,因为如果客户可靠地签入他们签出的连接,它就永远没有必要或有用。当它被实现时,我添加了第二个未经请求的配置参数debugUnreturnedConnectionStackTraces,以鼓励开发人员修复客户端应用程序,而不是懒惰地依赖unreturnedConnectionTimeout。
unreturnedConnectionTimeout的定义没有什么奇怪的。通常,使用连接池的应用程序不会长时间保持连接签出。这样做违背了连接池的目的,即允许应用程序根据需要获取连接,而不会造成很大的性能损失。连接池的替代方法是让应用程序签出连接并长期保留它们,因此它们始终可供使用。但是维护长寿命的连接变得很复杂,因此大多数应用程序将其委托给像 c3p0 这样的池化库。
我了解您有一个预先存在的应用程序来维护长期连接,您无法轻易修改。您希望在直接维护长期连接的应用程序和委托给池的应用程序之间建立混合架构。特别是,您需要一个库来帮助您维护您的应用程序已经设计为保留的长期连接。
不幸的是,c3p0 不是那个库。c3p0(像大多数连接池库一样)将签出的连接视为客户端的属性,并且在重新签入之前不对它们进行维护工作。这有两个例外:unreturnedConnectionTimeout将关闭()从客户端下面的连接如果签出时间过长,c3p0会在出现异常时无形地测试签出的Connection,以确定遇到异常的Connection是否适合返回池中,否则必须在签入时销毁。
unreturnedConnectionTimeout不是您想要的参数。您希望在一段时间内处于非活动状态时自动关闭连接,但允许无限期地签出连接。这样的参数可能被称为inactiveConnectionTimout
,并且是可以想象添加到 c3p0 的功能,但尚未添加。可能不会,因为很少有应用程序会长时间保持签出连接,而 c3p0 充满了帮助您在签入连接后或在签出和签入之间转换连接时观察故障的功能。
在您的(非常不寻常的)情况下,这意味着您想要的功能根本没有由库提供。我对此感到抱歉!