MySQL之—重連,連接丟失的代碼實(shí)例詳解

最近,項(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)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享