DBCP testOnBorrow()

最近在使用 Apache DBCP connection pool 時,發現過了一段很長的時間,MySQL 資料庫的連線就會中斷,導致在使用 SQL Query 時,發現查詢發生錯誤。

檢查的結果是 MySQL 的 wait_timeout 參數,預設值是 8 小時,過了 8 小時沒有 sql query,MySQL server 會自動中斷資料庫的連線,但是在 connection pool 這裡,卻不知道 connection 已經中斷,所以在使用這一個 connection 時,會發生錯誤。

目前的解決方法是使用 BasicDataSource 類別提供的 testOnBorrow(),配合設定 validationQuery() 為 SELECT 1,在每次取得 DataSource 時,就會先進行測試,確定資料庫的連線沒有問題之後,才會讓 Application 取得 DataSource。

留言