public interface TransactionSynchronization extends Ordered, FlushableSE
TransactionSynchronization 実装は、Ordered インターフェースを実装して、実行順序に影響を与えることができます。Ordered インターフェースを実装しない同期は、同期チェーンの最後に追加されます。
Spring 自体によって実行されるシステム同期は、特定の順序値を使用して、実行順序とのきめ細かいやり取りを可能にします(必要な場合)。
5.3 の時点で、同期の実行順序を宣言的に制御できるように Ordered
インターフェースを実装します。デフォルトの order
は Ordered.LOWEST_PRECEDENCE
で、実行が遅れていることを示します。以前の実行では低い値を返します。
TransactionSynchronizationManager
, AbstractPlatformTransactionManager
, DataSourceUtils.CONNECTION_SYNCHRONIZATION_ORDER
修飾子と型 | フィールドと説明 |
---|---|
static int | STATUS_COMMITTED 適切なコミットの場合の補完ステータス。 |
static int | STATUS_ROLLED_BACK 適切なロールバックの場合の補完ステータス。 |
static int | STATUS_UNKNOWN ヒューリスティックな混合完了またはシステムエラーの場合の補完ステータス。 |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
修飾子と型 | メソッドと説明 |
---|---|
default void | afterCommit() トランザクションのコミット後に呼び出されます。 |
default void | afterCompletion(int status) トランザクションのコミット / ロールバック後に呼び出されます。 |
default void | beforeCommit(boolean readOnly) トランザクションのコミット前( "beforeCompletion" の前)に呼び出されます。 |
default void | beforeCompletion() トランザクションのコミット / ロールバックの前に呼び出されます。 |
default void | flush() 該当する場合は、基になるセッションをデータストアにフラッシュします(例: Hibernate/JPA セッション)。 |
default int | getOrder() このトランザクション同期の実行順序を返します。 |
default void | resume() この同期を再開します。 |
default void | suspend() この同期を一時停止します。 |
static final int STATUS_COMMITTED
static final int STATUS_ROLLED_BACK
static final int STATUS_UNKNOWN
default int getOrder()
デフォルトは Ordered.LOWEST_PRECEDENCE
です。
Ordered
の getOrder
Ordered.HIGHEST_PRECEDENCE
, Ordered.LOWEST_PRECEDENCE
default void suspend()
default void resume()
default void flush()
FlushableSE
の flushSE
TransactionStatus.flush()
default void beforeCommit(boolean readOnly)
このコールバックは、トランザクションが実際にコミットされることを意味するものではありません。このメソッドが呼び出された後でも、ロールバックの決定が発生する可能性があります。このコールバックは、SQL ステートメントをデータベースにフラッシュするなど、コミットがまだ発生する可能性がある場合にのみ関連する作業を実行することを目的としています。
例外はコミット呼び出し元に伝播され、トランザクションのロールバックが発生することに注意してください。
readOnly
- トランザクションが読み取り専用トランザクションとして定義されているかどうか RuntimeExceptionSE
- エラーの場合 ; 呼び出し元に伝播されます (注意: ここで TransactionException サブクラスをスローしないでください! )beforeCompletion()
default void beforeCompletion()
beforeCommit
が例外をスローした場合でも、このメソッドは beforeCommit
の後に呼び出されます。このコールバックにより、トランザクションの補完前にリソースを閉じることができます。
RuntimeExceptionSE
- エラーの場合 ; ログに記録されますが、伝播されません (注意: ここで TransactionException サブクラスをスローしないでください! )beforeCommit(boolean)
, afterCompletion(int)
default void afterCommit()
できます。確認メッセージやメールなど、メイントランザクションが正常にコミットされた後に実行されるはずの操作をさらにコミットします。
注 : トランザクションはすでにコミットされていますが、トランザクションリソースはまだアクティブでアクセス可能です。結果として、この時点でトリガーされたデータアクセスコードは元のトランザクションに「参加」し、別のトランザクションで実行する必要があることを明示的に宣言しない限り、クリーンアップを実行できるようになります。、 ここから呼び出されるトランザクション操作には PROPAGATION_REQUIRES_NEW
を使用します。
RuntimeExceptionSE
- エラーの場合 ; 呼び出し元に伝播されます (注意: ここで TransactionException サブクラスをスローしないでください! )default void afterCompletion(int status)
注 : トランザクションはすでにコミットまたはロールバックされていますが、トランザクションリソースはまだアクティブでアクセス可能です。結果として、この時点でトリガーされたデータアクセスコードは元のトランザクションに「参加」し、別のトランザクションで実行する必要があることを明示的に宣言しない限り、クリーンアップを実行できるようになります。、 ここから呼び出されるトランザクション操作には PROPAGATION_REQUIRES_NEW
を使用します。
status
- STATUS_*
定数に従った完了ステータス RuntimeExceptionSE
- エラーの場合 ; ログに記録されますが、伝播されません (注意: ここで TransactionException サブクラスをスローしないでください! )STATUS_COMMITTED
, STATUS_ROLLED_BACK
, STATUS_UNKNOWN
, beforeCompletion()