Spring トランザクションのロールバックの問題
漂亮男人
漂亮男人 2017-06-12 09:24:47
0
4
931

Spring のものをサービス層に挿入し、2 つの挿入操作を実行します。サービス メソッドで自分で例外をスローしてからロールバックを指定する必要がありますか?それとも、挿入が失敗した場合、例外をスローせずに挿入はロールバックされますか?
ここでは mybatis のプロキシ dao 実装が使用されています。挿入が失敗したときにプロンプ​​トまたは例外がスローされますか?

漂亮男人
漂亮男人

全員に返信(4)
刘奇

Service クラスまたは特定のメソッドに @Transaction(rollbackFor=Throwable.class) アノテーションを使用します。 @Transaction アノテーションは、デフォルトでは RuntimeException のみをキャプチャしてロールバックすることに注意してください。つまり、例外をスローした場合、それはロールバックされません。すべての例外がロールバックされることを指定するには、rollbackFor=Throwable.class を忘れずに追加する必要があります

いいねを押す +0
小葫芦

@Positive Energy Frontline の回答に同意し、メソッドで複数の操作を実行する場合は、トランザクションの伝播スコープを考慮する必要があることを付け加えます。もちろん、デフォルトは propagation = Propagation.REQUIRED であり、これは次のことを意味します。現在トランザクションがありません。新しいトランザクションを作成します。既にトランザクションがある場合は、このトランザクションに追加します。

いいねを押す +0
淡淡烟草味

コンパイル例外がスローされた場合、自分でキャッチして処理できますか? Spring フレームワークを使用して自分で例外をキャッチして処理するため、フレームワークはロールバックをサポートしません。ロール戦略は、デフォルトの操作がサービス層に追加されるという最初の説明と一致しているため、伝播を考慮する必要はありません。行動。

いいねを押す +0
淡淡烟草味

前の2つの回答を読んだ後、さらに何かを追加します。 Spring のトランザクションは、デフォルトではインターフェイスベースの JDK プロキシです。したがって、サービス層で呼び出される 2 つの挿入メソッドについて、挿入もサービス層メソッドである場合、それがプライベート メソッドである場合、プライベート メソッドはロールバックされません。マルチスレッド状況におけるトランザクションの問題にも注意してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート