我使用unreturnedConnectionTimeout="1800"
和debugUnreturnedConnectionStackTraces="true"
释放被遗忘的连接。 但有时应用程序仍然存在,但数据库没有任何活动。 1800秒后,c3p0连接池将关闭连接。一旦我再次开始使用旧的entityManager,它会抱怨连接已关闭。 我试着每隔几分钟就向entityManager发送一个本地查询(SELECT NOW()
),但是这并没有让c3p0连接保持活动状态。也许本机查询绕过c3p0?保持c3p0连接存活
我想保留'unreturnedConnectionTimeout
'作为失败保存,但也希望能够保持有效的连接活着。
我该如何解决这个问题?
感谢, 米洛
编辑: 似乎C3P0连接不能unreturnedConnectionTimeout
后维持生命。它不关注活动,而是创造时间。现在我正在寻找api访问c3p0来更新创建时间...... Bah,脏......
谢谢,我完全同意。但是应用程序的设计是错误的,改变目前的工作很多。 –
生活就像这样......但是如果连接在正常的操作过程中长时间被检出,你将不能使用unreturnedConnectionTimeout作为故障安全。通过设置unreturnedConnectionTimout,您可以通知c3p0可以在合法的非病理用例中检出连接的最大时间段。如果连接被您的应用程序无限期地打开,那么没有任何时间不合法。 –
幸运的是,只要用户存储某些内容或切换到应用程序中的其他页面,连接就会关闭。我将超时设置为4小时,似乎功能足够好。 我觉得奇怪的是,c3p0在扔掉它之前不检查活动。我将为此创建一个问题。 –