標籤:
1.log錯誤記錄檔:
-org.hibernate.exception.JDBCConnectionException: The last packet successfully received from the server was 51,999,860 milliseconds ago. The last packet sent successfully to the server was 51,999,860 milliseconds ago. is longer than the server configured value of ‘wait_timeout‘. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property ‘autoReconnect=true‘ to avoid this problem.
其中錯誤還會提示你修改wait_timeout或是使用Connector/J的autoReconnect屬性避免該錯誤。
後來查了一些資料,才發現遇到這個問題的人還真不少,大部分都是使用串連池方式時才會出現這個問題,短串連應該很難出現這個問題。
2.這個問題的原因:
MySQL伺服器預設的“wait_timeout”是28800秒即8小時,
意味著如果一個串連的空閑時間超過8個小時,MySQL將自動斷開該串連,
而串連池卻認為該串連還是有效(因為並未校正串連的有效性),當應用申請使用該串連時,就會導致上面的報錯。
3.解決辦法:
a.按照錯誤的提示,可以在JDBC URL中使用autoReconnect屬性,下面是我的配置
<property name="connection.url">
jdbc:mysql://localhost:3306/anxincar?autoReconnect=true
</property>
其中紅色部分為新添加的屬性設定
不過網上有另一種說法,有人測試該設定只對mysql4之前的版本有效,具體是否屬實還有待考證。
b.我查看了下我們伺服器上安裝的是mysql5.0,為了確保串連不再丟失而出現此類問題,同時修改MySQL的參數,wait_timeout最大為31536000即1年,在my.ini中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
紅色部分為新添加的參數設定
最後:重啟mysql服務,重啟tomcat,讓設定檔生效。
mysql重連,串連丟失問題:The last packet sent successfully to the server was……