[英]Why does autoReconnect=true not seem to work?
我正在使用 JDBC 連接到 MySQL 服務器(我認為沒有連接池)。 在連接 URL 我有autoReconnect=true
但我的連接仍然超時。 我什至檢查conn.isClosed()
及其錯誤。 但是當我嘗試使用連接時,出現以下異常。
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Software caused connection abort: socket write error STACKTRACE: java.net.SocketException: Software caused connection abort: socket write error ...
我知道在 Java 1.6 中您可以使用conn.isValid(0)
來檢查連接,但我使用的是 Java 1.5
有沒有辦法確保它不會超時? 還是我必須升級到 Java 1.6?
我有同樣的問題,這絕對令人抓狂。 這是 MySQL 網站上的文檔所說的(重點是我的)
驅動程序是否應該嘗試重新建立陳舊和/或死連接? 如果啟用,驅動程序將為在陳舊或死連接上發出的查詢拋出異常,這些查詢屬於當前事務,但會在新事務中的連接上發出下一個查詢之前嘗試重新連接。 不建議使用此功能,因為它具有與 session state 相關的副作用以及應用程序無法正確處理 SQLExceptions 時的數據一致性,並且僅設計用於當您無法配置應用程序以處理因 dead 導致的 SQLExceptions 時並正確地過時的連接。 或者,研究將 MySQL 服務器變量“wait_timeout”設置為某個較高的值,而不是默認值 8 小時。
根據我的經驗,“在下一個查詢時重新連接”功能似乎也不起作用,但我使用的是 MySQL 4.0,這可能就是原因。
我最終編寫了一個微型框架來捕獲異常,檢查特定錯誤,並在可能的情況下嘗試重新連接並重試查詢。
ETA :此鏈接提供了更多信息,並表明將來可能會刪除自動重新連接。
autoReconnect 仍然會引發異常,因此您可以根據需要選擇對這種情況做些什么。 如果你抓住它,你應該會發現連接再次在那里。 (如果你在一個事務中,會有更多的復雜性——你當前的事務幾乎已經死了。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.