了解 JDBC 驅動程式中的逾時屬性
JDBC 驅動程式中的逾時設定可用來設定應用程式回應性的優先順序。 根據預設,大部分驅動程式的逾時會優先等候結果,以確保資料一致性。 請確保您選擇適合應用程式需求的逾時。
針對初始連線,loginTimeout
會使用於:
loginTimeout
是驅動程式等候建立伺服器連線的時間長度,以秒為單位。 如果超過此時間長度,則會傳回錯誤,而且不會建立任何開啟連線。 值為零表示此逾時為預設系統逾時,在 11.2 版和更新版本中預設為 30 秒。 針對 10.2 版和更低版本,預設逾時為 15 秒。 非零值為驅動程式應等待失敗連接之逾時的秒數。 如果您一直無法建立與 JDBC 驅動程式的連線,您可能需要將此逾時增加到 90 秒,甚至 120 秒。
建立連線之後,陳述式執行期間會使用 queryTimeout
、cancelQueryTimeout
和 lockTimeout
。 socketTimeout
用於與伺服器的任何驅動程式通訊。
queryTimeout
是時間,以秒為單位,驅動程式會在將執行命令傳送至伺服器之後等候,以接收來自具有資料的伺服器回應。 如果超過這個時間,則會取消命令。 超過此逾時並不會關閉連線。 預設值為 -1,表示無限期逾時。cancelQueryTimeout
是時間,以秒為單位,驅動程式會先等候伺服器確認queryTimeout
取消,然後再強制終止/關閉連線。 也就是說,驅動程式會在連線關閉之前,等候cancelQueryTimeout
加queryTimeout
秒的總時長。 將此逾時設定為非零值可確保當伺服器發生網路或通訊失敗時、當查詢逾時時,應用程式仍能保持回應。此屬性的預設值為 -1,這是無限的等候時間。lockTimeout
是在有鎖定封鎖陳述式執行的情況下,等候釋放鎖定的時間長度。 超過此逾時並不會導致關閉連線。 此屬性的預設值為 -1,這是無限的等候時間。socketTimeout
適用於與伺服器的所有通訊端通訊。 如果伺服器藉由不認可或不回覆數據來停止與驅動程式的通訊,則驅動程式會在關閉連線之前等候socketTimeout
的值。 將此逾時設定為非零值可確保如果伺服器發生網路或通訊失敗,應用程式仍可保持回應。 預設值為 0,表示無限期逾時。 請確定socketTimeout
大於queryTimeout
,以避免在queryTimeout
範圍期間發生通訊端逾時例外狀況。 同樣地,請確定socketTimeout
大於cancelQueryTimeout
,以避免在cancelQueryTimeout
範圍期間發生通訊端逾時例外狀況。
應用程式的合理逾時值取決於應用程式的優先順序。 設定較低的逾時值,會將應用程式回應性優先於資料一致性。 達到逾時時間時,應用程式必須決定最佳行動。 該決策以執行的資料庫動作為基礎。 例如,針對 SELECT
陳述式,決策可能是向使用者報告錯誤,或是重新連線並重試。 對於 INSERT
或 UPDATE
陳述式,該決策可能不同。
針對回應式應用程式,loginTimeout
及 queryTimeout
應設定為相對較低的值。 同樣地,cancelQueryTimeout
也應該設定為較低值,以確保驅動程式不會等待太久,讓伺服器在超過 queryTimeout
時接受查詢取消。 最後,socketTimeout
應該設定為驅動程式與伺服器的連線中斷 (網路中斷、伺服器當機等等) 時等待太久的最後防線。
屬性摘要
屬性 | 說明 | 預設 | 連線結果 |
---|---|---|---|
loginTimeout |
驅動程式應等待失敗連接逾時的秒數。 | 30 秒 [11.2+], 否則為 15 秒 |
關閉連線 |
queryTimeout |
取消查詢之前要等候的秒數。 | -1 [無限逾時] | 開啟連線 |
cancelQueryTimeout |
等候接受 QueryTimeout 取消的秒數。 | -1 [無限逾時] | 關閉連線 |
lockTimeout |
資料庫傳回鎖定逾時錯誤之前的的等候毫秒數。 | -1 [無限逾時] | 開啟連線 |
socketTimeout |
要等候通訊端讀取或寫入的毫秒數。 | 零 [無限逾時] | 關閉連線 |