最近,項(xiàng)目中經(jīng)常遇到mysql重連,連接丟失的代碼的問(wèn)題,研究了下解決方法,現(xiàn)共享出來(lái),大家可以參考一下,下面我們就進(jìn)入正題。
1、錯(cuò)誤日志
Caused?by:?com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:? The?last?packet?successfully?received?from?the?server?was?20,820,001?milliseconds?ago.?? The?last?packet?sent?successfully?to?the?server?was?20,820,002?milliseconds?ago.?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. ????????????at?sun.reflect.GeneratedConstructorAccessor29.newInstance(Unknown?Source)?~[na:na] ????????????at?sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)?~[na:1.7.0_51] ????????????at?java.lang.reflect.Constructor.newInstance(Constructor.java:526)?~[na:1.7.0_51] ????????????at?com.mysql.jdbc.Util.handleNewInstance(Util.java:411)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1129)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3988)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2598)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2828)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5372)?~[mysql-connector-java-5.1.29.jar:na] ????????????at?com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881)?~[c3p0-0.9.1.1.jar:0.9.1.1] ????????????at?org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.setAutoCommit(AttributeRestoringConnectionInvocationHandler.java:98)? ????????????~[quartz-2.2.1.jar:na]
2、解決辦法
– 如果使用的是JDBC,在JDBC URL上添加?autoReconnect=true,如:
jdbc:mysql://127.0.0.1:3306/mydb?autoReconnect=true
– 如果是在Spring中使用DBCP連接池,在定義datasource增加屬性validationQuery和testOnBorrow,如:
<bean> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property></bean>
– 如果是在Spring中使用c3p0連接池,則在定義datasource的時(shí)候,添加屬性testConnectionOnCheckin和testConnectionOnCheckout,如:
<bean> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property> ????<property></property></bean>
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END