2012-02-12 14 views
0

実際にTomcatサーバー上にあるred5アプリケーションを作成しています。これは、mysqlサーバーに接続するSpringフレームワークを使用しています(red5アプリケーションは本当に重要ではありません。ロック待機タイムアウトを処理するフック

私はスプリングフレームワークを使用してデータベースに接続しています。

私は、クエリの一部に私はロック待ちタイムアウトを超過し、次のエラーメッセージ

を得ることに気づきました。トランザクションを再開してみてください

私はすでに自分のサーバのロックタイムアウトを10秒に設定していますので、私のサーバに何かあるはずです。これが起こるたびに、私はmysqlサーバをデバッグしたいと思います。おそらくshow processlistを実行し、出力を取得するか、適切なエラーメッセージを投げることがあります。

ロックタイムアウトのすべてのケースを処理するためにスプリングフレームワーク内で使用しているJdbcTemplateにある種のフックを接続する方法はありますか?たぶん、メッセージを送信するなど、何度もやり直してみてください。

私のプロジェクトの各場所でSQLExceptionをチェックして個別に処理したくないということです。これは長い時間がかかる大きなプロジェクトです。 SQLExceptionがスローされるたびにそれを設定する方法はありますか?どのような種類のものをチェックして再試行を許可することができますが、試し読みを挿入して各クエリーを処理するのではなく、一般的なものを構築できますか?

+0

これが役立つかどうかを確認してください。http://stackoverflow.com/questions/6000336/how-to-debug-lock-wait-timeout-exceeded –

+0

ありがとうございますが、私はそれをJavaコードを使用して処理したいと思います。デッドロックをさらに増やしたくない – ufk

答えて

1

例外がハンドラから完全に伝播している場合は、HandlerExceptionResolverを実装して、例外がキャッチされたときにデバッグデータをクエリしてログに記録することができます。

また、例外のチェックと回復/デバッグを取り扱い、JdbcTemplateをサブクラス化し、必要なメソッドをオーバーライドし、try-catch(必要に応じて再スロー)でスーパー -Implementationへの呼び出しをラップすることができます。

関連する問題