c3p0 似乎关闭了事件连接

标签 c3p0

我设置了 unreturnedConnectionTimeout 来释放陈旧的连接。我以为这只会关闭没有任何事件的连接,但看起来这只是在指定时间后关闭每个连接。

这是一个错误还是“按设计”?

手册指出:

unreturnedConnectionTimeout defines a limit (in seconds) to how long a Connection may remain checked out. If set to a nozero value, unreturned, checked-out Connections that exceed this limit will be summarily destroyed, and then replaced in the pool. Obviously, you must take care to set this parameter to a value large enough that all intended operations on checked out Connections have time to complete. You can use this parameter to merely workaround unreliable client apps that fail to close() Connections

由此我得出结论,事件不会影响连接的丢弃。对我来说这听起来很奇怪。为什么要丢弃事件连接?

谢谢, 米洛

最佳答案

我是 c3p0 和您引用的段落的作者。

unreturnedConnectionTimeout正是它的名称和文档状态:unreturned 连接超时。它是根据用户反馈不情愿地实现的,因为如果客户可靠地 checkin 他们 checkout 的连接,它就永远没有必要或有用。当它被实现时,我添加了第二个未经请求的配置参数,debugUnreturnedConnectionStackTraces , 以鼓励开发人员修复客户端应用程序而不是懒惰地依赖 unreturnedConnectionTimeout .

unreturnedConnectionTimeout 的定义并不奇怪。 .通常,使用连接池的应用程序不会长时间保持连接 checkout 。这样做违背了连接池的目的,即允许应用程序根据需要获取连接,而不会造成很大的性能损失。连接池的替代 是让应用程序检查连接并长期保留它们,因此它们始终可供使用。但是维护长生命周期的连接变得很复杂,因此大多数应用程序将其委托(delegate)给像 c3p0 这样的池化库。

我了解您有一个预先存在的应用程序来维护长期连接,您无法轻易修改。您希望在直接维护长期连接的应用程序和委托(delegate)给池的应用程序之间建立混合架构。特别是,您需要一个库来帮助您维护您的应用程序已经设计为保留的长期连接。

不幸的是,c3p0 不是那个库。 c3p0(像大多数连接池库一样)将 checkout 的连接视为客户端的属性,并且在重新 checkin 之前不对它们进行维护工作。对此有两个异常(exception):unreturnedConnectionTimeout如果被 check out 时间过长,会 close() 从下面的客户端中取出连接,并且 c3p0 会在发生异常时无形地测试 check out 的连接,以确定遇到异常的连接是否适合返回池或else 必须在登记入住时销毁。

unreturnedConnectionTimeout不是你想要的参数。您希望在 Connections inactive 一段时间后自动关闭它们,但允许无限期地 check out Connections。这样的参数可能称为 inactiveConnectionTimout,并且是可以想象添加到 c3p0 的功能,但尚未添加。可能不会,因为很少有应用程序会长时间保持已 checkout 的连接,而 c3p0 充满了可帮助您在 checkin 连接后或在 checkout 和 checkin 之间转换时观察故障的功能。

在您的(非常不寻常的)情况下,这意味着您想要的功能根本没有由库提供。我很抱歉!

关于c3p0 似乎关闭了事件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439536/

相关文章:

java - C3P0 max语句配置?

java - 如何扩展 c3p0 ComboPooledDataSource

windows - 无法从底层数据库获取连接!使用 Hibernate + c3p0 + Oracle 11g

mysql - 正在初始化 c3p0 池...超时

spring - 如何在 Spring+Hibernate+C3P0 环境中构建/获取 ConnectionProvider?

mysql - vert.x async jdbc 不会关闭连接

jdbc - MysqlConnectionPoolDataSource 或 c3p0 之类的库?

spring - 带有 HSQLDB 的 Hibernate 4.1 给出 'data exception: string data, right truncation'

java - 将 quartz 添加到项目会破坏 jdbc 数据源

java - 不活动期后连接超时问题