在池中各種原因連接可以變得無效:服務器連接超時,網絡問題......Tomcat的JDBC連接池:testOnBorrow VS testWhileIdle
我的理解是,一個Tomcat JDBC連接池不提供任何擔保它提供給應用程序的連接的有效性。
爲了防止(實際上只降低風險)從池中獲取無效連接,解決方案似乎是連接驗證的配置。驗證連接意味着在數據庫上運行一個非常基本的查詢(例如,MySQL上的SELECT 1;
)。
Tomcat JDBC連接池提供了幾個選項來測試連接。我發現兩個更有趣的是testOnBorrow
和testWhileIdle
。
首先,我認爲testOnBorrow
是最好的選擇,因爲它基本上驗證連接,然後將其提供給應用程序(最大頻率由validationInterval
定義)。
但是過了一秒,我意識到在使用它之前測試連接可能會影響應用程序的響應。所以我認爲使用testWhileIdle
可以提高效率,因爲它在未使用時測試連接。
無論我選擇哪種方案,似乎他們只會降低獲取無效連接的風險,但這種風險依然存在。
所以我最終問:我應該使用testOnBorrow
或testWhileIdle
或兩者的組合?
在附註中,我很驚訝validationInterval
不適用於testOnReturn
,我沒有真正達到testOnConnect
的目的。
實際上驗證查詢不是強制性的。如果未提供驗證查詢,則在連接上使用isValid方法。我認爲將連接驗證留給JDBC驅動程序是一個好主意。 –
哦,看起來你是對的。只需閱讀文檔。將編輯帖子。 – UltimaWeapon