出現異常”The last packet sent successfully to the server was 0 milliseconds ago.“的大部分原因是由於數據庫回收了連接,而系統的緩沖池不知道,繼續使用被回收的連接所致的。
以mysql為例:
第一種解決辦法,就是將mysql回收空閑連接的時間變長,mysql默認回收時間是8小時,可以在mysql目錄下的my.ini中增加下面配置,將時間改為1天。
單位是秒,最大好像是24天:
[mysqld]
wait_timeout=86400
第二種解決辦法,可以通過配置,讓緩沖池去測試連接是否被回收,如果被回收,則不繼續使用,以dbcp為例:
#SQL查詢,用來驗證從連接池取出的連接 dbcp.validationQuery=SELECT 1 #指明連接是否被空閑連接回收器(如果有)進行檢驗,如果檢測失敗,則連接將被從池中去除 dbcp.testWhileIdle=true #在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位,一般比minEvictableIdleTimeMillis小 dbcp.timeBetweenEvictionRunsMillis=300000 #在每次空閑連接回收器線程(如果有)運行時檢查的連接數量,最好和maxActive一致 dbcp.numTestsPerEvictionRun=50 #連接池中連接,在時間段內一直空閑,被逐出連接池的時間(1000*60*60),以毫秒為單位 dbcp.minEvictableIdleTimeMillis=3600000
