了解 JDBC 驅動程式中的逾時屬性

下載 JDBC 驅動程式

JDBC 驅動程式中的逾時設定可用來設定應用程式回應性的優先順序。 根據預設,大部分驅動程式的逾時會優先等候結果,以確保資料一致性。 請確保您選擇適合應用程式需求的逾時。

針對初始連線,loginTimeout 會使用於:

  • loginTimeout 是驅動程式等候建立伺服器連線的時間長度,以秒為單位。 如果超過此時間長度,則會傳回錯誤,而且不會建立任何開啟連線。 值為零表示此逾時為預設系統逾時,在 11.2 版和更新版本中預設為 30 秒。 針對 10.2 版和更低版本,預設逾時為 15 秒。 非零值為驅動程式應等待失敗連接之逾時的秒數。 如果您一直無法建立與 JDBC 驅動程式的連線,您可能需要將此逾時增加到 90 秒,甚至 120 秒。

建立連線之後,陳述式執行期間會使用 queryTimeoutcancelQueryTimeoutlockTimeoutsocketTimeout 用於與伺服器的任何驅動程式通訊。

  • queryTimeout 是時間,以秒為單位,驅動程式會在將執行命令傳送至伺服器之後等候,以接收來自具有資料的伺服器回應。 如果超過這個時間,則會取消命令。 超過此逾時並不會關閉連線。 預設值為 -1,表示無限期逾時。
  • cancelQueryTimeout 是時間,以秒為單位,驅動程式會先等候伺服器確認 queryTimeout 取消,然後再強制終止/關閉連線。 也就是說,驅動程式會在連線關閉之前,等候 cancelQueryTimeoutqueryTimeout 秒的總時長。 將此逾時設定為非零值可確保當伺服器發生網路或通訊失敗時、當查詢逾時時,應用程式仍能保持回應。此屬性的預設值為 -1,這是無限的等候時間。
  • lockTimeout 是在有鎖定封鎖陳述式執行的情況下,等候釋放鎖定的時間長度。 超過此逾時並不會導致關閉連線。 此屬性的預設值為 -1,這是無限的等候時間。
  • socketTimeout 適用於與伺服器的所有通訊端通訊。 如果伺服器藉由不認可或不回覆數據來停止與驅動程式的通訊,則驅動程式會在關閉連線之前等候 socketTimeout 的值。 將此逾時設定為非零值可確保如果伺服器發生網路或通訊失敗,應用程式仍可保持回應。 預設值為 0,表示無限期逾時。 請確定 socketTimeout 大於 queryTimeout ,以避免在 queryTimeout 範圍期間發生通訊端逾時例外狀況。 同樣地,請確定 socketTimeout 大於 cancelQueryTimeout,以避免在 cancelQueryTimeout 範圍期間發生通訊端逾時例外狀況。

應用程式的合理逾時值取決於應用程式的優先順序。 設定較低的逾時值,會將應用程式回應性優先於資料一致性。 達到逾時時間時,應用程式必須決定最佳行動。 該決策以執行的資料庫動作為基礎。 例如,針對 SELECT 陳述式,決策可能是向使用者報告錯誤,或是重新連線並重試。 對於 INSERTUPDATE 陳述式,該決策可能不同。

針對回應式應用程式,loginTimeoutqueryTimeout 應設定為相對較低的值。 同樣地,cancelQueryTimeout 也應該設定為較低值,以確保驅動程式不會等待太久,讓伺服器在超過 queryTimeout 時接受查詢取消。 最後,socketTimeout 應該設定為驅動程式與伺服器的連線中斷 (網路中斷、伺服器當機等等) 時等待太久的最後防線。

屬性摘要

屬性 說明 預設 連線結果
loginTimeout 驅動程式應等待失敗連接逾時的秒數。 30 秒 [11.2+],
否則為 15 秒
關閉連線
queryTimeout 取消查詢之前要等候的秒數。 -1 [無限逾時] 開啟連線
cancelQueryTimeout 等候接受 QueryTimeout 取消的秒數。 -1 [無限逾時] 關閉連線
lockTimeout 資料庫傳回鎖定逾時錯誤之前的的等候毫秒數。 -1 [無限逾時] 開啟連線
socketTimeout 要等候通訊端讀取或寫入的毫秒數。 零 [無限逾時] 關閉連線

另請參閱

設定連接屬性