簡體   English   中英

為什么 autoReconnect=true 似乎不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM