検索

ホームページ  >  に質問  >  本文

Spring トランザクションのロールバックの問題

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

漂亮男人漂亮男人2723日前933

全員に返信(4)返信します

  • 怪我咯

    怪我咯2017-06-12 09:26:47

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

    返事
    0
  • 高洛峰

    高洛峰2017-06-12 09:26:47

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

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

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

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

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

    返事
    0
  • キャンセル返事