查了一下,原來是mysql超時設定的問題
如果連線閒置8小時 (8小時內沒有進行資料庫操作), mysql就會自動斷開連線, 要重啟tomcat.
解決辦法:
一種. 如果不用hibernate的話, 則在 connection url中加引數: autoreconnect=true
jdbc.url=jdbc:mysql://ipaddress:3306/database?autoreconnect=true&autoreconnectforpools=true
二種。用hibernate的話, 加如下屬性:
true
true
true
三。要是還用c3p0連線池: 10
0true
四。最不好的解決方案
使用connector/j連線mysql資料庫,程式執行較長時間後就會報以下錯誤:
communications link failure,the last packet successfully received from the server was *** millisecond ago.the last packet successfully sent to the server was *** millisecond ago。
其中錯誤還會提示你修改wait_timeout或是使用connector/j的autoreconnect屬性避免該錯誤。
後來查了一些資料,才發現遇到這個問題的人還真不少,大部分都是使用連線池方式時才會出現這個問題,短連線應該很難出現這個問題。這個問題的原因:
mysql伺服器預設的「wait_timeout」是28800秒即8小時,意味著如果乙個連線的空閒時間超過8個小時,mysql將自動斷開該連線,而連線池卻認為該連線還是有效的(因為並未校驗連線的有效性),當應用申請使用該連線時,就會導致上面的報錯。
1.按照錯誤的提示,可以在jdbc url中使用autoreconnect屬性,實際測試時使用了autoreconnect=true& failoverreadonly=false,不過並未起作用,使用的是5.1版本,可能真像網上所說的只對4之前的版本有效。
2.沒辦法,只能修改mysql的引數了,wait_timeout最大為31536000即1年,在my.cnf中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重啟生效,需要同時修改這兩個引數
檢視mysql設定超時 mysql設定查詢超時方法
文章來介紹了自定義mysql查詢超時的時間長度,下面我們來看看詳細的設定方法。首先,在libmysql中,是提供了mysql opt read timeout設定項的,並且libmysql中提供了設定相關設定項的api,如下 mysql options int stdcall mysql optio...
MySQL 超時問題
mysql預設連線超時時間為28800 也就是8個小時,如果八個小時沒有連線沒有進行操作就會自動斷掉,這樣就會導致有時服務還在執行,但是就是操作不了 既然知道問題了修改配置檔案,超時時間改為一年,就行了 vim etc my.cnf 然後在 mysqld 後面新增下面三句 character set...
C mobile UDP 開發設定超時問題
在mobile 6.5中使用upd 時需要設定超時 函式 sockethandler.setsocketoption socketoptionlevel.socket socketoptionname.receivetimeout,3000 丟擲異常如下 在 getsockopt 或 setsock...