@TargetSE(valueSE={TYPESE,METHODSE}) @RetentionSE(valueSE=RUNTIMESE) @InheritedSE @DocumentedSE public @interface Transactional
このアノテーションがクラスレベルで宣言されると、宣言しているクラスとそのサブクラスのすべてのメソッドにデフォルトとして適用されます。クラス階層の上位の祖先クラスには適用されないことに注意してください。サブクラスレベルのアノテーションに参加するには、継承されたメソッドをローカルで再宣言する必要があります。メソッドの可視性の制約の詳細については、リファレンスマニュアルのトランザクション管理セクションを参照してください。
このアノテーション型は通常、Spring の RuleBasedTransactionAttribute
クラスと直接比較できます。実際、AnnotationTransactionAttributeSource
はデータを後者のクラスに直接変換するため、Spring のトランザクションサポートコードはアノテーションについて知る必要がありません。カスタムロールバックルールが適用されない場合、トランザクションは RuntimeException
SE および Error
SE でロールバックされますが、チェックされた例外ではロールバックされません。
このアノテーションの属性のセマンティクスに関する特定の情報については、TransactionDefinition
および TransactionAttribute
javadoc を参照してください。
このアノテーションは通常、PlatformTransactionManager
によって管理されるスレッドバインドトランザクションで機能し、トランザクションを現在の実行スレッド内のすべてのデータアクセス操作に公開します。 注: これは、メソッド内で新しく開始されたスレッドには伝播されません。
あるいは、このアノテーションは、スレッドローカル変数の代わりに Reactor コンテキストを使用する ReactiveTransactionManager
によって管理されるリアクティブトランザクションを区別する場合があります。結果として、参加しているすべてのデータアクセス操作は、同じリアクティブパイプラインの同じ Reactor コンテキスト内で実行する必要があります。
TransactionAttribute
, DefaultTransactionAttribute
, RuleBasedTransactionAttribute
修飾子と型 | オプションの要素と説明 |
---|---|
Isolation | isolation トランザクション分離レベル。 |
StringSE[] | label ゼロ (0) 以上のトランザクションラベルを定義します。 |
ClassSE<? extends ThrowableSE>[] | noRollbackFor ゼロ (0) 以上の例外 Classes SE を定義します。これは Throwable SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。 |
StringSE[] | noRollbackForClassName ゼロ (0) 個以上の例外名( Throwable SE のサブクラスでなければならない例外)を定義し、どの例外型がトランザクションロールバックを引き起こしてはならないかを示します。 |
Propagation | propagation トランザクション伝播型。 |
boolean | readOnly トランザクションが事実上読み取り専用である場合に true に設定できるブールフラグ。実行時に対応する最適化が可能です。 |
ClassSE<? extends ThrowableSE>[] | rollbackFor ゼロ (0) 以上の例外 classes SE を定義します。これは Throwable SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こす必要があるかを示します。 |
StringSE[] | rollbackForClassName ゼロ (0) 個以上の例外名( Throwable SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。 |
int | timeout このトランザクションのタイムアウト(秒単位)。 |
StringSE | timeoutString このトランザクションのタイムアウト(秒単位)。 |
StringSE | transactionManager 指定されたトランザクションの修飾子値。 |
StringSE | value transactionManager() のエイリアス。 |
@AliasFor(value="transactionManager") public abstract StringSE value
transactionManager()
のエイリアス。transactionManager()
@AliasFor(value="value") public abstract StringSE transactionManager
特定の TransactionManager
Bean 定義の修飾子値(または Bean 名)に一致するターゲットトランザクションマネージャーを決定するために使用できます。
value()
, PlatformTransactionManager
, ReactiveTransactionManager
public abstract StringSE[] label
ラベルはトランザクションを説明するために使用でき、個々のトランザクションマネージャーが評価できます。ラベルは、単に説明的な目的を果たしたり、事前定義されたトランザクションマネージャー固有のオプションにマップしたりする場合があります。
トランザクションラベルの評価方法の詳細については、実際のトランザクションマネージャーの実装に関するドキュメントを参照してください。
DefaultTransactionAttribute.getLabels()
public abstract Propagation propagation
デフォルトは Propagation.REQUIRED
です。
public abstract Isolation isolation
デフォルトは Isolation.DEFAULT
です。
新しく開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED
または Propagation.REQUIRES_NEW
で使用するために特別に設計されています。異なる分離レベルの既存のトランザクションに参加するときに分離レベルの宣言を拒否したい場合は、トランザクションマネージャーで "validateExistingTransactions" フラグを "true" に切り替えることを検討してください。
TransactionDefinition.getIsolationLevel()
, AbstractPlatformTransactionManager.setValidateExistingTransaction(boolean)
public abstract int timeout
基になるトランザクションシステムのデフォルトのタイムアウトがデフォルトになります。
新たに開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED
または Propagation.REQUIRES_NEW
での使用専用に設計されています。
TransactionDefinition.getTimeout()
public abstract StringSE timeoutString
基になるトランザクションシステムのデフォルトのタイムアウトがデフォルトになります。
新たに開始されたトランザクションにのみ適用されるため、Propagation.REQUIRED
または Propagation.REQUIRES_NEW
での使用専用に設計されています。
TransactionDefinition.getTimeout()
public abstract boolean readOnly
true
に設定できるブールフラグ。実行時に対応する最適化が可能です。 デフォルトは false
です。
これは、実際のトランザクションサブシステムのヒントとしてのみ機能します。 必ずしも書き込みアクセスの試行が失敗するわけではありません。読み取り専用ヒントを解釈できないトランザクションマネージャーは、読み取り専用トランザクションを要求されたときに例外をスローせず、静かにヒントを無視します。
TransactionDefinition.isReadOnly()
, TransactionSynchronizationManager.isCurrentTransactionReadOnly()
public abstract ClassSE<? extends ThrowableSE>[] rollbackFor
classes
SE を定義します。これは Throwable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こす必要があるかを示します。 デフォルトでは、トランザクションは RuntimeException
SE および Error
SE でロールバックされますが、チェック済み例外(ビジネス例外)ではロールバックされません。詳細な説明については、DefaultTransactionAttribute.rollbackOn(Throwable)
を参照してください。
これは、(rollbackForClassName()
とは対照的に)例外クラスとそのサブクラスを一致させるロールバックルールを構築するための推奨する方法です。
public abstract StringSE[] rollbackForClassName
Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションロールバックを引き起こす必要があるかを示します。 これは、完全修飾クラス名の部分文字列にすることができますが、現在のところワイルドカードはサポートされていません。例: "ServletException"
の値は javax.servlet.ServletException
とそのサブクラスに一致します。
NB: パターンの具体性と、パッケージ情報を含めるかどうか(これは必須ではありません)を慎重に検討してください。例: "Exception"
はほぼすべてに一致し、おそらく他のルールを非表示にします。"Exception"
がすべてのチェック済み例外のルールを定義することを意図していた場合、"java.lang.Exception"
は正しいでしょう。"BaseBusinessException"
などのより珍しい Exception
SE 名では、FQN を使用する必要はありません。
public abstract ClassSE<? extends ThrowableSE>[] noRollbackFor
Classes
SE を定義します。これは Throwable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。 これは、(noRollbackForClassName()
とは対照的に)例外クラスとそのサブクラスを一致させるロールバックルールを構築するための推奨する方法です。
public abstract StringSE[] noRollbackForClassName
Throwable
SE のサブクラスでなければならない例外)を定義し、どの例外型がトランザクションロールバックを引き起こしてはならないかを示します。 指定された名前の処理方法の詳細については、rollbackForClassName()
の説明を参照してください。