1. 程式人生 > 資料庫 >連線資料庫超時設定autoReconnect=true

連線資料庫超時設定autoReconnect=true

mysql經典的8小時問題

鏈自:

http://blog.csdn.net/bluesnail216/article/details/15810119

參考http://www.wang1314.com/doc/topic-1520183-1.html

  http://www.jb51.net/article/32284.htm

  http://blog.csdn.net/wanghai__/article/details/8075762

  https://www.oschina.net/question/1245614_133952

1,問題現象:

com..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. 

解決辦法: 
如果連線閒置8小時 (8小時內沒有進行操作), mysql就會自動斷開連線, 要重啟tomcat. 
    不用的話, connection url加引數: autoReconnect=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>

 以上轉載連結地址:

2,另外:關於Mysql連結引數的說明如下:

mysql JDBC Driver

常用的有兩個,一個是gjt(Giant Tree)組織提供的mysql驅動,其JDBC Driver名稱(類名)為:org.gjt.mm.mysql.Driver

詳情請參見網站:http://www.gjt.org/

或在本網站

另一個是mysql官方提供的JDBC Driver,其JAVA類名為:com.mysql.jdbc.Driver

驅動下載網址:http://dev.mysql.com/downloads/,進入其中的MySQL Connector/J區域下載。

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?引數名1][=引數值1][&引數名2][=引數值2]...

現只列舉幾個重要的引數,如下表所示:

引數名稱 引數說明 預設值 最低版本要求
user 資料庫使用者名稱(用於連線資料庫)   所有版本
password 使用者密碼(用於連線資料庫)   所有版本
useUnicode 是否使用Unicode字符集,如果引數characterEncoding設定為gb2312或gbk,本引數值必須設定為true false 1.1g
characterEncoding 當useUnicode設定為true時,指定字元編碼。比如可設定為gb2312或gbk false 1.1g
autoReconnect 當資料庫連線異常中斷時,是否自動重新連線? false 1.1
autoReconnectForPools 是否使用針對資料庫連線池的重連策略 false 3.1.3
failOverReadOnly 自動重連成功後,連線是否設定為只讀? true 3.0.12
maxReconnects autoReconnect設定為true時,重試連線的次數 3 1.1
initialTimeout autoReconnect設定為true時,兩次重連之間的時間間隔,單位:秒 2 1.1
connectTimeout 和資料庫伺服器建立socket連線時的超時,單位:毫秒。 0表示永不超時,適用於JDK 1.4及更高版本 0 3.0.1
socketTimeout socket操作(讀寫)超時,單位:毫秒。 0表示永不超時 0 3.0.1

 

對應中文環境,通常mysql連線URL可以設定為:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用資料庫連線池的情況下,最好設定如下兩個引數:

autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置檔案中,url中的&符號需要轉義成&。比如在tomcat的server.xml中配置資料庫連線池時,mysql jdbc url樣例如下:

jdbc:mysql://localhost:3306/test?user=root&amp;password=&amp;useUnicode=true&amp;characterEncoding=gbk

&amp;autoReconnect=true&amp;failOverReadOnly=false

其他引數請參見mysql jdbc官方文件:

——知識在於分享!   PS:本隨筆屬個人學習小結,文中內容有參考網際網路上的相關文章。 如果您博文的連結被我引用,我承諾不會參雜經濟利益!