2013-08-24 134 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在扔掉它之前不檢查活動。我將爲此創建一個問題。 –