アノテーションインターフェース TransactionalEventListener
TransactionPhase
に従って呼び出される EventListener
。これは、TransactionalApplicationListener
と同等のアノテーションベースです。 イベントがアクティブなトランザクション内で公開されていない場合、fallbackExecution()
フラグが明示的に設定されていない限り、イベントは破棄されます。トランザクションが実行されている場合、イベントはその TransactionPhase
に従って処理されます。
アノテーション付きメソッドに @Order
を追加すると、トランザクション完了の前または後に実行されている他のリスナーの中でそのリスナーに優先順位を付けることができます。
6.1 以降、トランザクションイベントリスナーは、PlatformTransactionManager
によって管理されるスレッドバインドされたトランザクションだけでなく、ReactiveTransactionManager
によって管理されるリアクティブトランザクションも操作できます。前者の場合、リスナーは現在のスレッドバインドされたトランザクションを確認できることが保証されます。後者はスレッドローカル変数の代わりに Reactor コンテキストを使用するため、トランザクションコンテキストを発行されたイベントインスタンスにイベントソースとして含める必要があります。TransactionalEventPublisher
を参照してください。
警告 : TransactionPhase
が AFTER_COMMIT
(デフォルト)、AFTER_ROLLBACK
、AFTER_COMPLETION
に設定されている場合、トランザクションはすでにコミットまたはロールバックされていますが、トランザクションリソースは引き続きアクティブでアクセス可能である可能性があります。結果として、この時点でトリガーされたデータアクセスコードは元のトランザクションに「参加」しますが、変更はトランザクションリソースにコミットされません。詳細については、TransactionSynchronization.afterCompletion(int)
を参照してください。
- 導入:
- 4.2
- 作成者:
- Stephane Nicoll, Sam Brannen, Oliver Drotbohm
- 関連事項:
要素の詳細
phase
TransactionPhase phaseイベントの処理をバインドするフェーズ。デフォルトのフェーズは
TransactionPhase.AFTER_COMMIT
です。トランザクションが進行中でない場合、
fallbackExecution()
が明示的に有効にされていない限り、イベントはまったく処理されません。- デフォルト:
- AFTER_COMMIT
value
classes()
のエイリアス。- デフォルト:
- {}
classes
このリスナーが処理するイベントクラス。この属性が単一の値で指定されている場合、アノテーション付きメソッドはオプションで単一のパラメーターを受け入れることができます。ただし、この属性が複数の値で指定されている場合、アノテーション付きメソッドはパラメーターを宣言してはなりません。
- デフォルト:
- {}
condition
イベント処理を条件付きにするために使用される Spring 式言語(SpEL)属性。デフォルトは
""
です。つまり、イベントは常に処理されます。- デフォルト:
- ""
fallbackExecution
トランザクションが実行されていない場合にイベントを処理する必要があるかどうか。- デフォルト:
- false
id
リスナーのオプションの識別子。デフォルトでは、宣言メソッドの完全修飾シグネチャー (たとえば、"mypackage.MyClass.myMethod()") になります。- デフォルト:
- ""