一、問題現象:
連接池中的鏈接空閑超過一定時間后,再次訪問數據庫時候出現如下異常:
com.mysql.jdbc.Communication***ception: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
......................................................
** END NESTED EXCEPTION **
Last packet sent to the server was 62 ms ago.
mysql wait_timeout默認值為28800秒,即為8小時。也就是說默認情況下,Mysql在經過8小時(28800秒)不使用后會自動關閉已打開的連接。
二、解決方法
因此可以修改mysql的wait_timeout解決問題,但是在不影響系統性能的情況下具體配置成多大不好確定。
因此考慮從tomcat連接池想法解決問題
在mysql5以前可以在鏈接字符串后面增加autoReconnect=true來解決該問題。
mysql5以后autoReconnect=true已經不在起作用。
查詢dbcp資料發現如下配置項目
validationQuery
在連接返回給調用者前用于校驗連接是否有效的SQL語句。如果指定了SQL語句,則必須為一個“SELECT”語句,且至少會返回一行結果。
因此在tomcat連接池中增加如下配置問題解決:
timeBetweenEvictionRunsMillis='8000'
minEvictableIdleTimeMillis='10000' />
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com