2013-08-24 136 views
1

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

我想保留'unreturnedConnectionTimeout'作为失败保存,但也希望能够保持有效的连接活着。

我该如何解决这个问题?

感谢, 米洛

编辑: 似乎C3P0连接不能unreturnedConnectionTimeout后维持生命。它不关注活动,而是创造时间。现在我正在寻找api访问c3p0来更新创建时间...... Bah,脏......

回答

0

这听起来像是你很长时间保持连接检出。对于连接池来说这不是个好主意。应该根据需要获取连接(或休眠会话),使用并立即关闭,而不是保持活动状态并打开。

这是一个比配置问题更多的体系结构问题。

祝你好运!

+0

谢谢,我完全同意。但是应用程序的设计是错误的,改变目前的工作很多。 –

+0

生活就像这样......但是如果连接在正常的操作过程中长时间被检出,你将不能使用unreturnedConnectionTimeout作为故障安全。通过设置unreturnedConnectionTimout,您可以通知c3p0可以在合法的非病理用例中检出连接的最大时间段。如果连接被您的应用程序无限期地打开,那么没有任何时间不合法。 –

+0

幸运的是,只要用户存储某些内容或切换到应用程序中的其他页面,连接就会关闭。我将超时设置为4小时,似乎功能足够好。 我觉得奇怪的是,c3p0在扔掉它之前不检查活动。我将为此创建一个问题。 –