私は、SpringベースのWebサービスとSpring Jdbcベースの永続性を持つプロジェクトに取り組んでいます。 私はトランザクションを管理するためにDataSourceTransactionManagerを設定し、これをPointcutを使用してサービスレイヤーに適用しました。 トランザクションの伝播レベルが必須です。トランザクションの同時実行性を宣言的に処理する方法は?
クエリはSpringを通じて提供され、JdbcTemplateが提供されます。
サービスへの複数の同時リクエストが発生した場合、MySQLTransactionRollbackExceptionが発生します(「ロックを取得しようとするとデッドロックが見つかり、トランザクションを再試行してください」)。
明らかに、トランザクションの1つがロックを取得したため、2番目のトランザクションが失敗します。
私の質問は次のとおりです。 - 放棄して例外をスローするのではなく、ロックを取得できるまでSpringのサービス実行を遅らせるにはどうすればよいですか?
例外をキャッチしても、私はDAOをきれいに保つアドバイスとしてサービスレイヤーにトランザクションを適用しているため、クエリを再実行できません。
私は宣言的な解決策を得ることを望んでいます(私はAOPの熱狂的な&クルーセイダーの定型コードです:-))。しかし、プログラム的なソリューションでさえも大歓迎です。
ご意見ありがとうございます。
更新 -
@ninjaljはい、それは実際に本当のデッドロックでした。私はテストケースを間違って書いていました。愚かな私:-(