JDBC が Mysql に自動再接続メカニズムを実装する方法の例

黄舟
リリース: 2017-07-26 15:32:36
オリジナル
2918 人が閲覧しました

最近仕事で問題を発見し、関連情報を検索して最終的に解決しました。次の記事では、主に Mysql の自動再接続メカニズムの JDBC 実装に関する関連情報を紹介します。この記事では、さまざまな解決策を紹介しています。 , 以下を見てみましょう。

はじめに

この記事では、主に JDBC の MySQL 自動再接続メカニズムの実装に関する関連コンテンツを紹介します。詳細な紹介を見てみましょう。

この問題を回避するには Connector/J 接続プロパティ 'autoReconnect=true' を使用します


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 のタイムアウト設定に問題があることが判明しました

接続が 8 時間アイドル状態の場合(データベース操作は 8 時間以内に実行されません)、mysql は自動的に切断され、tomcat を再起動する必要があります

解決策:

最初の方法: Hibernate が使用されていない場合は、接続 URL にパラメータを追加します: autoReconnect =true

 jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true
ログイン後にコピー

2 番目: 休止状態を使用している場合は、次の属性を追加します:

 <property name="connection.autoReconnect">true</property>
 <property name="connection.autoReconnectForPools">true</property>
 <property name="connection.is-connection-validation-required">true</property>
ログイン後にコピー

3 番目: まだ 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>
ログイン後にコピー

4 番目: 最悪の解決策

コネクタを使用する/J は MySQL データベースに接続します。プログラムが長時間実行されると、次のエラーが報告されます:

通信リンク障害、サーバーから正常に受信された最後のパケットは *** ミリ秒前でした。最後のパケットは正常に送信されました。サーバーへの送信は ** * ミリ秒前でした。

このエラーでは、wait_timeout を変更するか、Connector/J の autoReconnect 属性を使用してこのエラーを回避するように求められます。

いくつかの情報を確認したところ、接続プール方式を使用しているときにこの問題に遭遇した人がかなりいることがわかりました。接続が短い場合、この問題は発生しにくいはずです。

この問題の理由:

MySQL サーバーのデフォルトの "wait_timeout" は 28800 秒または 8 時間です。これは、接続が 8 時間を超えてアイドル状態になると、MySQL は自動的に接続を切断しますが、接続プールは接続がまだ有効であると考えられます (接続の有効性が検証されていないため)。アプリケーションが接続の使用を申請すると、上記のエラーが発生します。

⑴. 実際のテストでは、JDBC URL で autoReconnect 属性を使用できましたが、バージョン 5.1 を使用していたのは事実かもしれません。インターネットで言及されているように、4 より前のバージョンのみ。

⑵。MySQL の最大 wait_timeout は 31536000 であり、再起動後に有効になるように my.cnf に追加する必要があります。これら 2 つのパラメータを同時に設定します。

autoReconnect=true& failOverReadOnly=false

概要


以上がJDBC が Mysql に自動再接続メカニズムを実装する方法の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!