ホームページ  >  記事  >  データベース  >  MySQL - 再接続、接続が失われた場合のコード例の詳細な説明

MySQL - 再接続、接続が失われた場合のコード例の詳細な説明

黄舟
黄舟オリジナル
2017-03-09 11:44:281403ブラウズ

最近、プロジェクト内で MySQL の再接続と接続コードの喪失の問題が頻繁に発生しました。解決策を検討したので、参考のために共有します。

1. エラーログ

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 を追加します。 Spring DBCP 接続プールを使用する場合は、データソースを定義するときに属性 validationQuery および testOnBorrow を追加します。たとえば、次のとおりです。

jdbc:mysql://127.0.0.1:3306/mydb?autoReconnect=true

- Spring で c3p0 接続プールを使用する場合は、データソースを定義するときに属性 testConnectionOnCheckin および testConnectionOnCheckout を追加します。 :

りー



以上がMySQL - 再接続、接続が失われた場合のコード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。