最近在工作中發(fā)現(xiàn)了一個問題,通過查找相關(guān)的資料終于解決了,下面這篇文章主要給大家介紹了關(guān)于jdbc實現(xiàn)mysql自動重連機制的相關(guān)資料,文中給出多種解決的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
前言
本文主要給大家介紹的是關(guān)于JDBC實現(xiàn)mysql自動重連機制的相關(guān)內(nèi)容,分享出來供大家參考學習,下面來一起看看詳細的介紹:
日志:using the Connector/J connection property ‘autoReconnect=true’ to avoid this problem
com.mysql.jdbc.CommunicationsException:?The?last?packet?successfully?received?from?the?server?was58129?seconds?ago.The?last?packet?sent?successfully?to?the?server?was?58129?seconds?ago,?which?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.
查了一下,原來是MySQL超時設(shè)置的問題
如果連接閑置8小時 (8小時內(nèi)沒有進行數(shù)據(jù)庫操作), mysql就會自動斷開連接, 要重啟tomcat.
解決辦法:
第一種:如果不用hibernate的話, 則在 connection url中加參數(shù): autoReconnect=true
?jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true
第二種:用hibernate的話, 加如下屬性:
?<property>true</property> ?<property>true</property> ?<property>true</property>
第三種:要是還用c3p0連接池:
?<property>1</property>? ?<property>0</property>? ?<property>0</property> ?<property>true</property>
第四種:最不好的解決方案
使用Connector/J連接MySQL數(shù)據(jù)庫,程序運行較長時間后就會報以下錯誤:
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屬性避免該錯誤。
后來查了一些資料,才發(fā)現(xiàn)遇到這個問題的人還真不少,大部分都是使用連接池方式時才會出現(xiàn)這個問題,短連接應(yīng)該很難出現(xiàn)這個問題。
這個問題的原因:
MySQL服務(wù)器默認的“wait_timeout”是28800秒即8小時,意味著如果一個連接的空閑時間超過8個小時,MySQL將自動斷開該 連接,而連接池卻認為該連接還是有效的(因為并未校驗連接的有效性),當應(yīng)用申請使用該連接時,就會導致上面的報錯。
⑴.按照錯誤的提示,可以在JDBC URL中使用autoReconnect屬性,實際測試時使用了autoReconnect=true& failOverReadOnly=false,不過并未起作用,使用的是5.1版本,可能真像網(wǎng)上所說的只對4之前的版本有效。
⑵.沒辦法,只能修改MySQL的參數(shù)了,wait_timeout最大為31536000即1年,在my.cnf中加入:
[mysqld] wait_timeout=31536000 interactive_timeout=31536000
重啟生效,需要同時修改這兩個參數(shù)。
總結(jié)