アノテーションインターフェース Transactional


個々のメソッドまたはクラスのトランザクション属性を記述します。

このアノテーションがクラスレベルで宣言されると、宣言しているクラスとそのサブクラスのすべてのメソッドにデフォルトとして適用されます。クラス階層の上位の祖先クラスには適用されないことに注意してください。サブクラスレベルのアノテーションに参加するには、継承されたメソッドをローカルで再宣言する必要があります。メソッドの可視性の制約の詳細については、リファレンスマニュアルのトランザクション管理セクションを参照してください。

このアノテーションは通常、Spring の RuleBasedTransactionAttribute クラスと直接比較できます。実際、AnnotationTransactionAttributeSource はこのアノテーションの属性を RuleBasedTransactionAttribute のプロパティに直接変換するため、Spring のトランザクションサポートコードはアノテーションについて知る必要がありません。

属性セマンティクス

このアノテーションでカスタムロールバックルールが構成されていない場合、トランザクションは RuntimeExceptionSE および ErrorSE でロールバックされますが、チェックされた例外ではロールバックされません。

ロールバックルールは、特定の例外がスローされたときにトランザクションをロールバックする必要があるかどうかを決定します。ルールは型またはパターンに基づいています。カスタムルールは、rollbackFor()/noRollbackFor() および rollbackForClassName()/noRollbackForClassName() を介して構成できます。これにより、ルールをそれぞれ型またはパターンとして指定できます。

ロールバックルールが例外型で定義されている場合、その型はスローされた例外の型とそのスーパー型との照合に使用され、型の安全性を提供し、パターンの使用時に発生する可能性のある意図しない一致を回避します。例: jakarta.servlet.ServletException.class の値は、型 jakarta.servlet.ServletException およびそのサブクラスのスローされた例外にのみ一致します。

ロールバックルールが例外パターンで定義されている場合、パターンは完全修飾クラス名または例外型の完全修飾クラス名のサブストリング(Throwable のサブクラスである必要があります)であり、現在ワイルドカードはサポートされていません。例: "jakarta.servlet.ServletException" または "ServletException" の値は、jakarta.servlet.ServletException とそのサブクラスに一致します。

警告 : パターンの具体性と、パッケージ情報を含めるかどうか (必須ではありません) を慎重に検討する必要があります。例: "Exception" はほぼすべてに一致し、おそらく他のルールを隠します。"Exception" がすべてのチェック済み例外のルールを定義することを意図している場合、"java.lang.Exception" は正しいでしょう。"BaseBusinessException" などのより固有の例外名を使用すると、例外パターンに完全修飾クラス名を使用する必要がなくなる可能性があります。さらに、パターンを介して定義されたロールバックルールは、同様の名前の例外やネストされたクラスに意図しない一致をもたらす可能性があります。これは、スローされた例外の名前にロールバックルール用に構成された例外パターンが含まれている場合、スローされた例外が特定のパターンベースのロールバックルールに一致すると見なされるためです。例: "com.example.CustomException" に対して一致するように構成されたルールが与えられた場合、そのルールは com.example.CustomExceptionV2 という名前の例外 (CustomException と同じパッケージにあるが、追加のサフィックスを持つ例外) または com.example.CustomException$AnotherException という名前の例外 (CustomException でネストされたクラスとして宣言された例外) と一致します)。

このアノテーションの他の属性のセマンティクスに関する具体的な情報については、TransactionDefinition および TransactionAttribute javadoc を参照してください。

トランザクション管理

このアノテーションは通常、PlatformTransactionManager によって管理されるスレッドバインドトランザクションで機能し、トランザクションを現在の実行スレッド内のすべてのデータアクセス操作に公開します。 注: これは、メソッド内で新しく開始されたスレッドには伝播されません

あるいは、このアノテーションは、スレッドローカル変数の代わりに Reactor コンテキストを使用する ReactiveTransactionManager によって管理されるリアクティブトランザクションを区別する場合があります。結果として、参加しているすべてのデータアクセス操作は、同じリアクティブパイプラインの同じ Reactor コンテキスト内で実行する必要があります。

注: ReactiveTransactionManager で構成されている場合、すべてのトランザクション境界メソッドはリアクティブパイプラインを返すことが期待されます。void メソッドまたは通常の戻り値の型は、たとえば transactionManager() を通じて、通常の PlatformTransactionManager に関連付ける必要があります。

導入:
1.2
作成者:
Colin Sampaleanu, Juergen Hoeller, Sam Brannen, Mark Paluch
関連事項:
  • オプション要素のサマリー

    オプション要素
    修飾子と型
    オプションの要素
    説明
    トランザクション分離レベル。
    ゼロ (0) 以上のトランザクションラベルを定義します。
    ClassSE<? extends ThrowableSE>[]
    ゼロ (0) 以上の例外 typesSE を定義します。これは ThrowableSE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。
    ゼロ (0) 以上の例外名パターン(ThrowableSE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。
    トランザクション伝播型。
    boolean
    トランザクションが事実上読み取り専用である場合に true に設定できるブールフラグ。実行時に対応する最適化が可能です。
    ClassSE<? extends ThrowableSE>[]
    ゼロ (0) 以上の例外SEを定義します。これは ThrowableSE のサブクラスである必要があり、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。
    ゼロ (0) 以上の例外名パターン(ThrowableSE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こさなければならないかを示します。
    int
    このトランザクションのタイムアウト(秒単位)。
    このトランザクションのタイムアウト(秒単位)。
    指定されたトランザクションの修飾子値。
    transactionManager() のエイリアス。
  • 要素の詳細

    • value

      @AliasFor("transactionManager") StringSE value
      transactionManager() のエイリアス。
      関連事項:
      デフォルト:
      ""
    • transactionManager

      @AliasFor("value") StringSE transactionManager
      指定されたトランザクションの修飾子値。

      特定の TransactionManager Bean 定義の修飾子値(または Bean 名)に一致するターゲットトランザクションマネージャーを決定するために使用できます。

      導入:
      4.2
      関連事項:
      デフォルト:
      ""
    • label

      StringSE[] label
      ゼロ (0) 以上のトランザクションラベルを定義します。

      ラベルはトランザクションを説明するために使用でき、個々のトランザクションマネージャーが評価できます。ラベルは、単に説明的な目的を果たしたり、事前定義されたトランザクションマネージャー固有のオプションにマップしたりする場合があります。

      トランザクションラベルの評価方法の詳細については、実際のトランザクションマネージャーの実装に関するドキュメントを参照してください。

      導入:
      5.3
      関連事項:
      デフォルト:
      {}
    • propagation

      Propagation propagation
      トランザクション伝播型。

      デフォルトは Propagation.REQUIRED です。

      関連事項:
      デフォルト:
      REQUIRED
    • isolation

      Isolation isolation
      トランザクション分離レベル。

      デフォルトは Isolation.DEFAULT です。

      新たに開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED または Propagation.REQUIRES_NEW での使用専用に設計されています。分離レベルが異なる既存のトランザクションに参加するときに分離レベルの宣言を拒否する場合は、トランザクションマネージャーで "validateExistingTransactions" フラグを "true" に切り替えることを検討してください。

      関連事項:
      デフォルト:
      DEFAULT
    • timeout

      int timeout
      このトランザクションのタイムアウト(秒単位)。

      基になるトランザクションシステムのデフォルトのタイムアウトがデフォルトになります。

      新たに開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED または Propagation.REQUIRES_NEW での使用専用に設計されています。

      戻り値:
      秒単位のタイムアウト
      関連事項:
      デフォルト:
      -1
    • timeoutString

      StringSE timeoutString
      このトランザクションのタイムアウト(秒単位)。

      基になるトランザクションシステムのデフォルトのタイムアウトがデフォルトになります。

      新たに開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED または Propagation.REQUIRES_NEW での使用専用に設計されています。

      戻り値:
      文字列値としての秒単位のタイムアウト。例: プレースホルダー
      導入:
      5.3
      関連事項:
      デフォルト:
      ""
    • readOnly

      boolean readOnly
      トランザクションが事実上読み取り専用である場合に true に設定できるブールフラグ。実行時に対応する最適化が可能です。

      デフォルトは false です。

      これは、実際のトランザクションサブシステムのヒントとしてのみ機能します。 必ずしも書き込みアクセスの試行が失敗するわけではありません。読み取り専用ヒントを解釈できないトランザクションマネージャーは、読み取り専用トランザクションを要求されたときに例外をスローせず、静かにヒントを無視します。

      関連事項:
      デフォルト:
      false
    • rollbackFor

      ClassSE<? extends ThrowableSE>[] rollbackFor
      ゼロ (0) 以上の例外SEを定義します。これは ThrowableSE のサブクラスである必要があり、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。

      デフォルトでは、トランザクションは RuntimeExceptionSE および ErrorSE でロールバックされますが、チェックされた例外(ビジネス例外)ではロールバックされません。詳細な説明については、DefaultTransactionAttribute.rollbackOn(Throwable) を参照してください。

      これは、( rollbackForClassName() とは対照的に) ロールバックルールを構築するための推奨される方法であり、型 セーフな方法で例外型とそのサブクラスを照合します。ロールバックルールのセマンティクスの詳細については、クラスレベルの javadoc を参照してください。

      関連事項:
      デフォルト:
      {}
    • rollbackForClassName

      StringSE[] rollbackForClassName
      ゼロ (0) 以上の例外名パターン(ThrowableSE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こさなければならないかを示します。

      ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。

      関連事項:
      デフォルト:
      {}
    • noRollbackFor

      ClassSE<? extends ThrowableSE>[] noRollbackFor
      ゼロ (0) 以上の例外 typesSE を定義します。これは ThrowableSE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。

      これは、( noRollbackForClassName() とは対照的に) ロールバックルールを構築するための推奨される方法であり、型 セーフな方法で例外型とそのサブクラスを照合します。ロールバックルールのセマンティクスの詳細については、クラスレベルの javadoc を参照してください。

      関連事項:
      デフォルト:
      {}
    • noRollbackForClassName

      StringSE[] noRollbackForClassName
      ゼロ (0) 以上の例外名パターン(ThrowableSE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。

      ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。

      関連事項:
      デフォルト:
      {}