クラス TransactionSynchronizationManager

java.lang.ObjectSE
org.springframework.transaction.reactive.TransactionSynchronizationManager

public class TransactionSynchronizationManager extends ObjectSE
サブスクライバーコンテキストごとにリソースとトランザクションの同期を管理する主要デリゲート。通常のアプリケーションコードではなく、リソース管理コードで使用されます。

上書きせずにキーごとに 1 つのリソースをサポートします。つまり、同じキーに新しいリソースを設定する前にリソースを削除する必要があります。同期がアクティブな場合、トランザクション同期のリストをサポートします。

リソース管理コードは、コンテキストにバインドされたリソースを確認する必要があります。getResource を介したデータベース接続。通常、このようなコードはリソースを作業単位にバインドすることは想定されていません。これはトランザクションマネージャーの責任であるためです。さらなるオプションは、任意の数のリソースにまたがるトランザクションを実行するために、トランザクション同期がアクティブな場合、最初の使用時に遅延バインドすることです。

トランザクションの同期は、initSynchronization() および clearSynchronization() を介してトランザクションマネージャーによってアクティブ化および非アクティブ化する必要があります。これは AbstractReactiveTransactionManager によって自動的にサポートされるため、すべての標準 Spring トランザクションマネージャーによってサポートされます。

リソース管理コードは、このマネージャーがアクティブな場合にのみ同期を登録する必要があります。これは、isSynchronizationActive() を介して確認できます。それ以外の場合は、すぐにリソースのクリーンアップを実行する必要があります。トランザクションの同期がアクティブでない場合、現在のトランザクションがないか、トランザクションマネージャーがトランザクションの同期をサポートしていません。

同期は、たとえば、トランザクション内で常に同じリソースを返すために使用されます。特定の接続ファクトリのデータベース接続。

導入:
5.2
作成者:
Mark Paluch, Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • TransactionSynchronizationManager

      public TransactionSynchronizationManager(TransactionContext transactionContext)
  • メソッドの詳細

    • forCurrentTransaction

      public static reactor.core.publisher.Mono<TransactionSynchronizationManager> forCurrentTransaction()
      現在のトランザクションコンテキストに関連付けられている TransactionSynchronizationManager を取得します。

      主に、リソースまたは同期をバインドするコードを対象としています。

      例外:
      NoTransactionException - トランザクション情報が見つからない場合 — たとえば、メソッドがマネージドトランザクションの外部で呼び出されたため
    • hasResource

      public boolean hasResource(ObjectSE key)
      現在のコンテキストにバインドされている指定されたキーのリソースがあるかどうかを確認します。
      パラメーター:
      key - チェックするキー (通常、リソースファクトリ)
      戻り値:
      現在のコンテキストにバインドされた値がある場合
    • getResource

      @Nullable public ObjectSE getResource(ObjectSE key)
      現在のコンテキストにバインドされている指定されたキーのリソースを取得します。
      パラメーター:
      key - チェックするキー (通常、リソースファクトリ)
      戻り値:
      現在のコンテキスト (通常はアクティブなリソースオブジェクト) にバインドされた値、またはない場合は null 
    • bindResource

      public void bindResource(ObjectSE key, ObjectSE value) throws IllegalStateExceptionSE
      指定されたキーの指定されたリソースを現在のコンテキストにバインドします。
      パラメーター:
      key - 値をバインドするキー (通常、リソースファクトリ)
      value - バインドする値 (通常、アクティブなリソースオブジェクト)
      例外:
      IllegalStateExceptionSE - コンテキストにバインドされた値がすでにある場合
    • unbindResource

      public ObjectSE unbindResource(ObjectSE key) throws IllegalStateExceptionSE
      現在のコンテキストから特定のキーのリソースをバインド解除します。
      パラメーター:
      key - バインドを解除するキー (通常、リソースファクトリ)
      戻り値:
      以前にバインドされた値 (通常、アクティブなリソースオブジェクト)
      例外:
      IllegalStateExceptionSE - コンテキストにバインドされた値がない場合
    • unbindResourceIfPossible

      @Nullable public ObjectSE unbindResourceIfPossible(ObjectSE key)
      現在のコンテキストから特定のキーのリソースをバインド解除します。
      パラメーター:
      key - バインドを解除するキー (通常、リソースファクトリ)
      戻り値:
      以前にバインドされた値、またはバインドされていない場合は null 
    • isSynchronizationActive

      public boolean isSynchronizationActive()
      現在のコンテキストでトランザクション同期がアクティブな場合に戻ります。不要なインスタンスの作成を避けるために、登録前に呼び出すことができます。
      関連事項:
    • initSynchronization

      public void initSynchronization() throws IllegalStateExceptionSE
      現在のコンテキストのトランザクション同期をアクティブにします。トランザクション開始時にトランザクションマネージャーによって呼び出されます。
      例外:
      IllegalStateExceptionSE - 同期がすでにアクティブな場合
    • registerSynchronization

      public void registerSynchronization(TransactionSynchronization synchronization) throws IllegalStateExceptionSE
      現在のコンテキストの新しいトランザクション同期を登録します。通常、リソース管理コードによって呼び出されます。

      同期により Ordered インターフェースを実装できることに注意してください。それらは、オーダー値に応じた順序で実行されます(ある場合)。

      パラメーター:
      synchronization - 登録する同期オブジェクト
      例外:
      IllegalStateExceptionSE - トランザクション同期がアクティブでない場合
      関連事項:
    • getSynchronizations

      public ListSE<TransactionSynchronization> getSynchronizations() throws IllegalStateExceptionSE
      現在のコンテキストに登録されているすべての同期の変更不可能なスナップショットリストを返します。
      戻り値:
      TransactionSynchronization インスタンスの変更不可能なリスト
      例外:
      IllegalStateExceptionSE - 同期がアクティブでない場合
      関連事項:
    • clearSynchronization

      public void clearSynchronization() throws IllegalStateExceptionSE
      現在のコンテキストのトランザクション同期を非アクティブ化します。トランザクションのクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      例外:
      IllegalStateExceptionSE - 同期がアクティブでない場合
    • setCurrentTransactionName

      public void setCurrentTransactionName(@Nullable StringSE name)
      存在する場合、現在のトランザクションの名前を公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      name - トランザクションの名前、またはそれをリセットする null 
      関連事項:
    • getCurrentTransactionName

      @Nullable public StringSE getCurrentTransactionName()
      現在のトランザクションの名前、または何も設定されていない場合は null を返します。特定の名前付きトランザクションのフェッチ戦略を最適化するなど、ユースケースごとの最適化のためにリソース管理コードによって呼び出されます。
      関連事項:
    • setCurrentTransactionReadOnly

      public void setCurrentTransactionReadOnly(boolean readOnly)
      現在のトランザクションの読み取り専用フラグを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      readOnly - 現在のトランザクションを読み取り専用としてマークする true。このような読み取り専用マーカーをリセットする false 
      関連事項:
    • isCurrentTransactionReadOnly

      public boolean isCurrentTransactionReadOnly()
      現在のトランザクションが読み取り専用としてマークされているかどうかを返します。新しく作成されたリソースを準備するときに、リソース管理コードによって呼び出されます。

      トランザクションの同期は、コミット時の変更検出を抑制することができるように、beforeCommit コールバックの引数として読み取り専用フラグを受け取ることに注意してください。このメソッドは、以前の読み取り専用チェックに使用することを目的としています。

      関連事項:
    • setCurrentTransactionIsolationLevel

      public void setCurrentTransactionIsolationLevel(@Nullable IntegerSE isolationLevel)
      現在のトランザクションの分離レベルを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      isolationLevel - R2DBC 接続定数(対応する Spring TransactionDefinition 定数に相当)に応じて公開する分離レベル、またはそれをリセットする null 
      関連事項:
    • getCurrentTransactionIsolationLevel

      @Nullable public IntegerSE getCurrentTransactionIsolationLevel()
      存在する場合、現在のトランザクションの分離レベルを返します。新しく作成されたリソース(R2DBC 接続など)を準備するときに、リソース管理コードによって呼び出されます。
      戻り値:
      R2DBC 接続定数(対応する Spring TransactionDefinition 定数に相当)に応じた現在公開されている分離レベル、または存在しない場合は null 
      関連事項:
    • setActualTransactionActive

      public void setActualTransactionActive(boolean active)
      現在アクティブな実際のトランザクションがあるかどうかを公開します。トランザクションの開始時およびクリーンアップ時にトランザクションマネージャーによって呼び出されます。
      パラメーター:
      active - 現在のコンテキストを実際のトランザクションに関連付けられているものとしてマークする true。そのマーカーをリセットする false 
    • isActualTransactionActive

      public boolean isActualTransactionActive()
      現在アクティブな実際のトランザクションがあるかどうかを返します。これは、現在のコンテキストがアクティブなトランザクション同期だけでなく実際のトランザクションに関連付けられているかどうかを示します。

      アクティブなトランザクション同期 (バッキングリソーストランザクションの有無にかかわらず、PROPAGATION_SUPPORTS 上でも) とアクティブな実際のトランザクション (バッキングリソーストランザクションあり、PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW など) を区別するリソース管理コードによって呼び出されます。

      関連事項:
    • clear

      public void clear()
      トランザクションの同期状態全体をクリアします。登録された同期とさまざまなトランザクション特性。
      関連事項: