0

JdbcTemplateクラスを使用してMysqlサーバーでデータベースプログラミングを行うには、SpringFrameworkでJavaを使用しています。接続アイドルタイムアウトエラーを正しく処理する方法

org.apache.commons.dbcp.BasicDataSourceをdbデータソースとして使用する。私は、接続に自動再パラメータを追加することで、この問題に対処したり、追加したくない

The last packet successfully received from the server was XXXXX milliseconds ago. 

:接続が長時間アイドル状態にあるときに時々、CommunicationExceptionは、次のメッセージを投げている

プロパティは、接続が正しく開かれたことを確認するために、各クエリの前にselect 1を実行します。また、mysqlサーバの設定に触れず、タイムアウト値を上げたくないのです。

私がしたいのは、その例外を適切に処理することです。

私はCommunicationExceptionをキャッチし、成功するまで再試行し、X回以上失敗した場合はX回再試行が失敗したことを示すExceptionをスローすると考えました。

  • この問題を解決する方法は他にありませんか?
  • 私の考えはどうですか? :)
  • 多分私に自動的にそれを行うspringframeworkに何かがあり、私はそれを逃した?

すべての情報をお待ちしております。

ありがとうございました!

+0

なぜ、autoReconnectを使用しないのですか? – EJP

+0

autoReconnectパラメータは廃止予定です – ufk

+1

"接続状態やデータベースの状態情報の破損を招くことなくMySQLサーバに再接続する安全な方法がないため、autoReconnectオプションの使用はお勧めできません。プールからの利用可能な接続を使用してアプリケーションをMySQLサーバに接続できるようにする接続プール。autoReconnect機能は廃止され、将来のリリースで削除される可能性があります。 "、http://dev.mysql.com/doc /refman/5.1/ja/connector-j-usagenotes-troubleshooting.html#qandaitem-21-3-5-3-1-4 – ptomli

答えて

1

クエリが再起動可能な場合は、再試行すると意味があります。私は場所でこれを行うことを知っていて、それは奇妙な、一時的な不具合のためにうまく動作します。本当に珍しいはずだが、イベントを記録する。

接続エラーは寿命の一部であり、接続タイムアウトとは異なる方法で処理する必要があります。

あなたはあまりにも長い間接続のホールドを維持していないならば、あなたもBasicDataSourcetestOnBorrowtestOnReturnプロパティを確認でき、失敗「手で」あなたが持っている接続を処理する健全な方法を持っている必要がありますが。これらは、各問合せの前に必ずハンドルを収集しない限り、必ずしも各問合せの前にテスト選択を意味するとは限りません。

プールに多数の接続があり、タイムアウトを停止するのに十分頻繁に使用されていない場合は、実際には構成エラーです。それを避けるためのコードを書くことは少し後退しているようです。

関連する問題