【问题标题】:Keeping c3p0 connections alive保持 c3p0 连接处于活动状态
【发布时间】:2013-08-27 08:34:50
【问题描述】:

我正在使用unreturnedConnectionTimeout="1800"debugUnreturnedConnectionStackTraces="true" 来释放被遗忘的连接。 但有时应用程序仍然存在,但数据库没有活动。 c3p0 连接池会在 1800 秒后关闭连接。一旦我再次开始使用旧的 entityManager,它就会抱怨连接已关闭。 我尝试每隔几分钟向 entityManager 发送一个本机查询 (SELECT NOW()),但这并不能保持 c3p0 连接处于活动状态。也许原生查询绕过 c3p0???

我希望保留“unreturnedConnectionTimeout”作为失败保存,但也希望能够保持有效连接。

我该如何解决这个问题?

谢谢, 米洛

编辑: 似乎在unreturnedConnectionTimeout 之后c3p0 连接无法保持活动状态。它不关注活动,而只关注创建时间。现在我正在寻找对 c3p0 的 api 访问以更新创建时间...呸,脏...

【问题讨论】:

    标签: hibernate jpa entitymanager c3p0


    【解决方案1】:

    听起来您将连接检查保持很长时间。对于连接池,这不是一个好主意。连接(或 Hibernate 会话)应根据需要获取、使用,然后立即关闭,而不是保持活动和打开状态。

    这是一个架构问题,而不是配置问题。

    祝你好运!

    【讨论】:

    • 谢谢,我完全同意。但是应用程序的设计方式是错误的,目前更改它的工作量很大。
    • 生活就是这样......但是如果在正常操作过程中长时间保持签出连接,您将无法使用 unreturnedConnectionTimeout 作为故障保护。通过设置 unreturnedConnectionTimout,您将通知 c3p0 在合法的、非病态的用例中可以签出连接的最长时间。如果您的应用程序无限期地保持打开连接,那么没有任何时间长度是不合法的。
    • 对我来说幸运的是,一旦用户存储某些内容或切换到应用程序中的另一个页面,连接就会关闭。我将超时设置为 4 小时,这似乎足够好。我觉得奇怪的是 c3p0 在扔掉它之前没有检查活动。我将为此创建一个问题。
    猜你喜欢
    • 2012-01-03
    • 2021-09-13
    • 2019-09-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多