前幾天在剛買的雲服務器上部署了一個 JavaWeb 項目,但是發現每天訪問這個項目時,無論點開哪個模塊都會出現 org.springframework.dao.RecoverableDataAccessException 這個異常,后來網上查閱錯誤原因,發現是mysql默認如果8小時沒有請求的話就會斷開鏈接.
登錄進mysql ,輸入 show global variables like 'wait_timeout';
mysql﹥ show global variables like 'wait_timeout';
可以看到下面這個查詢結果
可以看到 wait_timeout = 28800, interactive_timeout =28800, 表示 mysql 將在服務器 長達 28800 秒未訪問后斷開連接,28800 即為 8 小時
1)interactive_timeout:
參數含義:服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。
參數默認值:28800秒(8小時)
(2)wait_timeout:
參數含義:服務器關閉非交互連接之前等待活動的秒數。
在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義)。
參數默認值:28800秒(8小時)
解決辦法:
在 /etc/my.cnf 配置文件中加入下面兩行后重啟 mysql 和 tomcat 即可生效
wait_timeout=31536000 interactive_timeout=31536000
其中 windows 的最長未訪問斷開連接時間是 24天, linux 是 365 天,也就是 31536000 秒
配置完后,可以再次輸入 show global variables like 'wait_timeout'; 命令
可以看到修改成功
參考博客:
mysql自動斷開鏈接的問題,org.springframework.dao.RecoverableDataAccessException