@TargetSE(valueSE={TYPESE,METHODSE}) @RetentionSE(valueSE=RUNTIMESE) @InheritedSE @DocumentedSE public @interface Transactional
このアノテーションがクラスレベルで宣言されると、宣言しているクラスとそのサブクラスのすべてのメソッドにデフォルトとして適用されます。クラス階層の上位の祖先クラスには適用されないことに注意してください。サブクラスレベルのアノテーションに参加するには、継承されたメソッドをローカルで再宣言する必要があります。メソッドの可視性の制約の詳細については、リファレンスマニュアルのトランザクション管理セクションを参照してください。
このアノテーションは通常、Spring の RuleBasedTransactionAttribute
クラスと直接比較できます。実際、AnnotationTransactionAttributeSource
はこのアノテーションの属性を RuleBasedTransactionAttribute
のプロパティに直接変換するため、Spring のトランザクションサポートコードはアノテーションについて知る必要がありません。
このアノテーションでカスタムロールバックルールが構成されていない場合、トランザクションは RuntimeException
SE および Error
SE でロールバックされますが、チェックされた例外ではロールバックされません。
ロールバックルールは、特定の例外がスローされたときにトランザクションをロールバックする必要があるかどうかを決定し、ルールはパターンに基づいています。パターンは、完全修飾クラス名、または例外型(Throwable
のサブクラスである必要があります)の完全修飾クラス名のサブストリングにすることができますが、現在ワイルドカードはサポートされていません。例: "javax.servlet.ServletException"
または "ServletException"
の値は、javax.servlet.ServletException
とそのサブクラスに一致します。
ロールバックルールは、rollbackFor()
/noRollbackFor()
および rollbackForClassName()
/noRollbackForClassName()
を介して構成できます。これにより、パターンをそれぞれ Class
SE 参照または文字列SEとして指定できます。例外型がクラス参照として指定されている場合、その完全修飾名がパターンとして使用されます。@Transactional(rollbackFor = example.CustomException.class)
は @Transactional(rollbackForClassName = "example.CustomException")
と同等です。
警告 : パターンがどの程度具体的であるか、およびパッケージ情報を含めるかどうか(必須ではありません)を慎重に検討する必要があります。例: "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 コンテキスト内で実行する必要があります。
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) 個以上の例外クラス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
Throwable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こす必要があるかを示します。 デフォルトでは、トランザクションは RuntimeException
SE および Error
SE でロールバックされますが、チェックされた例外(ビジネス例外)ではロールバックされません。詳細な説明については、DefaultTransactionAttribute.rollbackOn(Throwable)
を参照してください。
これは、(rollbackForClassName()
とは対照的に)ロールバックルールを作成し、例外型、そのサブクラス、そのネストされたクラスに一致させるための推奨される方法です。ロールバックルールのセマンティクスと、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
rollbackForClassName()
, RollbackRuleAttribute(Class)
, DefaultTransactionAttribute.rollbackOn(Throwable)
public abstract StringSE[] rollbackForClassName
Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こさなければならないかを示します。ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
rollbackFor()
, RollbackRuleAttribute(String)
, DefaultTransactionAttribute.rollbackOn(Throwable)
public abstract ClassSE<? extends ThrowableSE>[] noRollbackFor
Classes
SE を定義します。これは Throwable
SE のサブクラスである必要があり、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。 これは、(noRollbackForClassName()
とは対照的に)ロールバックルールを作成し、例外型、そのサブクラス、そのネストされたクラスに一致させるための推奨される方法です。ロールバックルールのセマンティクスと、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
noRollbackForClassName()
, NoRollbackRuleAttribute(Class)
, DefaultTransactionAttribute.rollbackOn(Throwable)
public abstract StringSE[] noRollbackForClassName
Throwable
SE のサブクラスでなければならない例外の場合)を定義し、どの例外型がトランザクションのロールバックを引き起こしてはならないかを示します。ロールバックルールのセマンティクス、パターン、意図しない一致の可能性に関する警告の詳細については、クラスレベルの javadoc を参照してください。
noRollbackFor()
, NoRollbackRuleAttribute(String)
, DefaultTransactionAttribute.rollbackOn(Throwable)