@TargetSE(valueSE={METHODSE,ANNOTATION_TYPESE}) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @EventListener public @interface TransactionalEventListener
TransactionPhase
に従って呼び出される EventListener
。これは、TransactionalApplicationListener
と同等のアノテーションベースです。 イベントがアクティブなトランザクション内で公開されていない場合、fallbackExecution()
フラグが明示的に設定されていない限り、イベントは破棄されます。トランザクションが実行されている場合、イベントはその TransactionPhase
に従って処理されます。
アノテーション付きメソッドに @Order
を追加すると、トランザクション完了の前または後に実行されている他のリスナーの中でそのリスナーに優先順位を付けることができます。
注: トランザクションイベントリスナーは、PlatformTransactionManager
によって管理されるスレッドバウンドトランザクションでのみ機能します。ReactiveTransactionManager
によって管理されるリアクティブトランザクションは、スレッドローカル変数の代わりに Reactor コンテキストを使用するため、イベントリスナーの観点からは、参加できる互換性のあるアクティブトランザクションはありません。
警告 : TransactionPhase
が AFTER_COMMIT
(デフォルト)、AFTER_ROLLBACK
、AFTER_COMPLETION
に設定されている場合、トランザクションはすでにコミットまたはロールバックされていますが、トランザクションリソースは引き続きアクティブでアクセス可能である可能性があります。結果として、この時点でトリガーされたデータアクセスコードは元のトランザクションに「参加」しますが、変更はトランザクションリソースにコミットされません。詳細については、TransactionSynchronization.afterCompletion(int)
を参照してください。
TransactionalApplicationListener
, TransactionalApplicationListenerMethodAdapter
修飾子と型 | オプションの要素と説明 |
---|---|
ClassSE<?>[] | classes このリスナーが処理するイベントクラス。 |
StringSE | condition イベント処理を条件付きにするために使用される Spring 式言語(SpEL)属性。 |
boolean | fallbackExecution トランザクションが実行されていない場合にイベントを処理する必要があるかどうか。 |
StringSE | id リスナーのオプションの識別子。デフォルトでは、宣言メソッドの完全修飾署名になります(例: |
TransactionPhase | phase イベントの処理をバインドするフェーズ。 |
ClassSE<?>[] | value classes() のエイリアス。 |
public abstract TransactionPhase phase
デフォルトのフェーズは TransactionPhase.AFTER_COMMIT
です。
トランザクションが進行中でない場合、fallbackExecution()
が明示的に有効にされていない限り、イベントはまったく処理されません。
public abstract boolean fallbackExecution
@AliasFor(annotation=EventListener.class, attribute="classes") public abstract ClassSE<?>[] value
classes()
のエイリアス。@AliasFor(annotation=EventListener.class, attribute="classes") public abstract ClassSE<?>[] classes
この属性が単一の値で指定されている場合、アノテーション付きメソッドはオプションで単一のパラメーターを受け入れることができます。ただし、この属性が複数の値で指定されている場合、アノテーション付きメソッドはパラメーターを宣言してはなりません。
@AliasFor(annotation=EventListener.class, attribute="condition") public abstract StringSE condition
デフォルトは ""
です。つまり、イベントは常に処理されます。
@AliasFor(annotation=EventListener.class, attribute="id") public abstract StringSE id