這篇文章將為大家詳細(xì)講解有關(guān)Mysql數(shù)據(jù)庫中的自動(dòng)重連機(jī)制怎么利用JDBC實(shí)現(xiàn),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
為瑯琊等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及瑯琊網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、瑯琊網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!日志: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í)設(shè)置的問題
如果連接閑置8小時(shí) (8小時(shí)內(nèi)沒有進(jìn)行數(shù)據(jù)庫操作), mysql就會(huì)自動(dòng)斷開連接, 要重啟tomcat.
解決辦法:
第一種:如果不用hibernate的話, 則在 connection url中加參數(shù): autoReconnect=true
jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true
第二種:用hibernate的話, 加如下屬性:
<property name="connection.autoReconnect">true</property> <property name="connection.autoReconnectForPools">true</property> <property name="connection.is-connection-validation-required">true</property>
第三種:要是還用c3p0連接池:
<property name="hibernate.c3p0.acquire_increment">1</property> <property name="hibernate.c3p0.idle_test_period">0</property> <property name="hibernate.c3p0.timeout">0</property> <property name="hibernate.c3p0.validate">true</property>
第四種:最不好的解決方案
使用Connector/J連接MySQL數(shù)據(jù)庫,程序運(yùn)行較長時(shí)間后就會(huì)報(bào)以下錯(cuò)誤:
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。
其中錯(cuò)誤還會(huì)提示你修改wait_timeout或是使用Connector/J的autoReconnect屬性避免該錯(cuò)誤。
后來查了一些資料,才發(fā)現(xiàn)遇到這個(gè)問題的人還真不少,大部分都是使用連接池方式時(shí)才會(huì)出現(xiàn)這個(gè)問題,短連接應(yīng)該很難出現(xiàn)這個(gè)問題。
這個(gè)問題的原因:
MySQL服務(wù)器默認(rèn)的“wait_timeout”是28800秒即8小時(shí),意味著如果一個(gè)連接的空閑時(shí)間超過8個(gè)小時(shí),MySQL將自動(dòng)斷開該 連接,而連接池卻認(rèn)為該連接還是有效的(因?yàn)椴⑽葱r?yàn)連接的有效性),當(dāng)應(yīng)用申請(qǐng)使用該連接時(shí),就會(huì)導(dǎo)致上面的報(bào)錯(cuò)。
⑴.按照錯(cuò)誤的提示,可以在JDBC URL中使用autoReconnect屬性,實(shí)際測試時(shí)使用了autoReconnect=true& failOverReadOnly=false
,不過并未起作用,使用的是5.1版本,可能真像網(wǎng)上所說的只對(duì)4之前的版本有效。
⑵.沒辦法,只能修改MySQL的參數(shù)了,wait_timeout大為31536000即1年,在my.cnf中加入:
[mysqld] wait_timeout=31536000 interactive_timeout=31536000
重啟生效,需要同時(shí)修改這兩個(gè)參數(shù)。
關(guān)于Mysql數(shù)據(jù)庫中的自動(dòng)重連機(jī)制怎么利用JDBC實(shí)現(xiàn)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
本文標(biāo)題:Mysql數(shù)據(jù)庫中的自動(dòng)重連機(jī)制怎么利用JDBC實(shí)現(xiàn)-創(chuàng)新互聯(lián)
標(biāo)題來源:http://aaarwkj.com/article20/pjdco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、定制開發(fā)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容