0

JdbcTemplate クラスを使用して、Mysql Server でデータベース プログラミングを行うために、SpringFramework で Java を使用しています。

org.apache.commons.dbcp.BasicDataSourcedb データ ソースとして使用します。

接続が長時間アイドル状態になるCommunicationExceptionと、次のメッセージがスローされることがあります。

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

select 1autoReconnect パラメーターを接続に追加したり、各クエリの前に実行されるプロパティを追加して、接続が適切に開かれていることを確認したりして、この問題を処理したくありません。また、mysql サーバーの構成に手を加えたり、タイムアウト値を上げたりしたくありません。

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

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

  • この問題を処理する方法を他に知っている人はいますか?
  • 私の考えはどうですか?:)
  • おそらく、Springframework に自動的にそれを行う何かがあり、それを見逃したのでしょうか?

どんな情報でも大歓迎です。

ありがとう!

4

1 に答える 1

1

クエリが再起動可能な場合は、再試行するのが理にかなっています。私たちはこれを場所で行っていることを知っており、奇妙な一時的な不具合に対してはうまく機能します. ただし、実際にはまれであるため、イベントをログに記録します。

接続の失敗は人生の一部であり、接続のタイムアウトとは異なる方法で処理する必要があります。

「手元にある」失敗した接続を適切に処理する必要がありますが、接続を長時間保持しない場合は、testOnBorrowtestOnReturnのプロパティを確認することもできますBasicDataSource。これらは、すべてのクエリの前にハンドルを収集するだけでない限り、必ずしも各クエリの前にテスト選択を意味するわけではありません。

プールに多くの接続があり、それらがタイムアウトを停止するのに十分な頻度で使用されていない場合、それは実際には構成エラーです。それを避けるためのコードを書くのは少し後ろ向きに思えます。

于 2011-10-18T15:09:00.770 に答える