有沒有辦法在設置的超時時間後關閉JDBC連接?這些連接正在GenericObjectPool中創建。我知道該池可以關閉池中的空閒連接,但連接被認爲是活動的又如何呢?我試圖在有人不叫close()的情況下控制連接泄漏。從我讀過的唯一方法可能是在服務器上設置超時時間,但我希望能夠在Java中找到一種方法。謝謝!設置超時期限後關閉JDBC連接?
回答
我同意彼得勞瑞,我會確保總是關閉連接。但是,如果我還是要確保關閉連接(如果有人從池中把它忘了還吧),我會如下做到這一點:
- 裝飾返回的java.sql.Connection中在泳池旁邊。
- 在構造函數中創建一個計時器,並將其設置爲配置的持續時間,以允許使用活動連接。
- 如果用戶在定時器觸發前調用關閉它,我將取消定時器並將連接返回到池。
- 如果計時器在用戶關閉連接之前觸發,我將返回到池的連接並使裝飾連接無效,以便進一步調用將拋出
IllegalStateException
。
只需要提及'Glassfish'中有一個'Leak Timeout'和'Leak Reclaim'連接池的高級設置。如果連接在「泄漏超時」秒後沒有返回到池中,則會自動返回到池(如果啓用了「泄漏回收」)。 –
是的,activeConnectionTimeout已成爲連接存儲器中的Coomon可配置參數。感謝有關glassfish的信息 – Vikdor
謝謝你的想法。我會研究這個。你們是對的,打電話是最好的解決方案。 – user1668814
我使用舊的Apache commons池,但我切換到新的Apache Tomcat Pool這實際上有一個功能可以在超時後刪除連接。
removeAbandoned - (布爾值)標記刪除被放棄的連接,如果它們超過removeAbandonedTimout。如果設置爲true,則連接將被視爲放棄並有資格刪除(如果它的使用時間超過removeAbandonedTimeout)將其設置爲true可以恢復未能關閉連接的應用程序的數據庫連接。另請參閱logAbandoned默認值爲false。
- 1. JDBC連接超時
- 2. Hibernate不關閉JDBC連接
- 3. JDBC MySQL - 連接已關閉
- 4. 關閉jdbc連接時出現NullPointerException
- 5. 超時:底層連接已關閉:連接意外關閉
- 6. 連接關閉超時後,hibernate無法重新連接到mysql
- 7. 是否可以在超時後關閉另一個線程的JDBC連接?
- 8. 會話過期時關閉jdbc連接對象
- 9. 連接超時JDBC-MySQL
- 10. 爲什麼Socket.Receive超時就當超時時間設置爲無限半關閉的連接?
- 11. 設置SSH連接超時
- 12. Lua設置連接超時
- 13. Jetty不關閉超時連接
- 14. 在sql中關閉連接 - 超時
- 15. System.Net.Mail.SmtpException:SMTP命令超時 - 關閉連接
- 16. 如何在MySQL JDBC驅動程序上設置連接超時?
- 17. Simba] [ImpalaJDBCDriver](500151)在Imapala jdbc連接中設置/關閉會話時出錯
- 18. 如何設置遠程連接到postgresql數據庫的jdbc連接超時值?
- 19. 達到MYSQL連接限制 - JDBC是否自動關閉?
- 20. 服務器連接超時的時間限制?主動JDBC
- 21. MS SQL Server和JDBC:關閉連接
- 22. 僅在finally塊中關閉JDBC連接?
- 23. vert.x異步jdbc未關閉連接
- 24. 播放框架:關閉JDBC連接
- 25. 關閉Spark中的MYSQL JDBC連接
- 26. 超時設置時不關閉套接字
- 27. 如何設置$ .getJSON超時無限期
- 28. 如何設置HttpDefaultClient的超時期限?
- 29. 如何關閉捕捉的HttpWebRequest超時後底層連接
- 30. 使用配置設置連接超時
我會確保您正確關閉您的資源。試圖解決問題可以隱藏更嚴重的問題。 –
您能否詳細說明一下:「如果有人不叫close()」。 – vector
我認爲他意味着程序員忘記了在連接上調用close()。 –