アノテーションインターフェース Transactional
このアノテーションがクラスレベルで宣言されると、宣言しているクラスとそのサブクラスのすべてのメソッドにデフォルトとして適用されます。クラス階層の上位の祖先クラスには適用されないことに注意してください。サブクラスレベルのアノテーションに参加するには、継承されたメソッドをローカルで再宣言する必要があります。メソッドの可視性の制約の詳細については、リファレンスマニュアルのトランザクション管理セクションを参照してください。
このアノテーションは通常、Spring の RuleBasedTransactionAttribute
クラスと直接比較できます。実際、AnnotationTransactionAttributeSource
はこのアノテーションの属性を RuleBasedTransactionAttribute
のプロパティに直接変換するため、Spring のトランザクションサポートコードはアノテーションについて知る必要がありません。
属性セマンティクス
このアノテーションでカスタムロールバックルールが構成されていない場合、トランザクションは RuntimeException
SE および Error
SE でロールバックされますが、チェックされた例外ではロールバックされません。
ロールバックルールは、特定の例外がスローされたときにトランザクションをロールバックする必要があるかどうかを決定します。ルールは型またはパターンに基づいています。カスタムルールは、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
- 関連事項:
オプション要素のサマリー
修飾子と型オプションの要素説明トランザクション分離レベル。StringSE[]
ゼロ (0) 以上のトランザクションラベルを定義します。ClassSE<? extends ThrowableSE>[]
ゼロ (0) 以上の例外types
SE を定義します。これはThrowable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。StringSE[]
ゼロ (0) 以上の例外名パターン(Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。トランザクション伝播型。boolean
トランザクションが事実上読み取り専用である場合にtrue
に設定できるブールフラグ。実行時に対応する最適化が可能です。ClassSE<? extends ThrowableSE>[]
ゼロ (0) 以上の例外型SEを定義します。これはThrowable
SE のサブクラスである必要があり、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。StringSE[]
ゼロ (0) 以上の例外名パターン(Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こさなければならないかを示します。int
このトランザクションのタイムアウト(秒単位)。このトランザクションのタイムアウト(秒単位)。指定されたトランザクションの修飾子値。transactionManager()
のエイリアス。
要素の詳細
value
transactionManager()
のエイリアス。- 関連事項:
- デフォルト:
- ""
transactionManager
指定されたトランザクションの修飾子値。特定の
TransactionManager
Bean 定義の修飾子値(または Bean 名)に一致するターゲットトランザクションマネージャーを決定するために使用できます。あるいは、6.2 以降では、
qualifier value
を含む型レベルの Bean 修飾子アノテーションも考慮されます。特定のトランザクションマネージャーの修飾子値 (または Bean 名) と一致する場合、そのトランザクションマネージャーは、この属性に特定の修飾子がないトランザクション定義に使用されます。このような型レベルの修飾子は、具象クラスで宣言でき、基本クラスのトランザクション定義にも適用され、修飾されていない基本クラスメソッドのデフォルトのトランザクションマネージャーの選択を効果的にオーバーライドします。- デフォルト:
- ""
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を定義します。これはThrowable
SE のサブクラスである必要があり、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。デフォルトでは、トランザクションは
RuntimeException
SE およびError
SE でロールバックされますが、チェックされた例外(ビジネス例外)ではロールバックされません。詳細な説明については、DefaultTransactionAttribute.rollbackOn(Throwable)
を参照してください。これは、(
rollbackForClassName()
とは対照的に) ロールバックルールを構築するための推奨される方法であり、型 セーフな方法で例外型とそのサブクラスを照合します。ロールバックルールのセマンティクスの詳細については、クラスレベルの javadoc を参照してください。- 関連事項:
- デフォルト:
- {}
rollbackForClassName
StringSE[] rollbackForClassNameゼロ (0) 以上の例外名パターン(Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こさなければならないかを示します。ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
- デフォルト:
- {}
noRollbackFor
ClassSE<? extends ThrowableSE>[] noRollbackForゼロ (0) 以上の例外types
SE を定義します。これはThrowable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。これは、(
noRollbackForClassName()
とは対照的に) ロールバックルールを構築するための推奨される方法であり、型 セーフな方法で例外型とそのサブクラスを照合します。ロールバックルールのセマンティクスの詳細については、クラスレベルの javadoc を参照してください。- 関連事項:
- デフォルト:
- {}
noRollbackForClassName
StringSE[] noRollbackForClassNameゼロ (0) 以上の例外名パターン(Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
- 関連事項:
- デフォルト:
- {}