クラス R2dbcTransactionManager

実装されたすべてのインターフェース:
SerializableSEInitializingBeanConfigurableTransactionManagerReactiveTransactionManagerTransactionManager

public class R2dbcTransactionManager extends AbstractReactiveTransactionManager implements InitializingBean
単一の R2DBC ConnectionFactoryReactiveTransactionManager 実装。このクラスは、セットアップで Connection ファクトリメカニズムとして ConnectionFactory を使用している限り、任意の R2DBC ドライバーを使用する任意の環境で動作できます。R2DBC Connection を指定された ConnectionFactory から現在のサブスクライバーコンテキストにバインドし、ConnectionFactory ごとに 1 つのコンテキストバインド Connection を許可する可能性があります。

注: このトランザクションマネージャーが動作する ConnectionFactory は、独立した Connection を返す必要がありますConnection は通常、接続プールから取得されますが、ConnectionFactory は、特にスコープ指定された、または制約された Connection を返してはなりません。このトランザクションマネージャーは、指定された伝播動作に従って、Connection をコンテキストバインドされたトランザクションに関連付けます。トランザクションの進行中であっても、個別の独立した Connection を取得できることを前提としています。

標準の R2DBC スタイルの ConnectionFactory.create() 呼び出しではなく、ConnectionFactoryUtils.getConnection(ConnectionFactory) を介して R2DBC 接続を取得するには、アプリケーションコードが必要です。DatabaseClient などの Spring クラスは、この戦略を暗黙的に使用します。このトランザクションマネージャーと組み合わせて使用しない場合、ConnectionFactoryUtils ルックアップ戦略はネイティブ ConnectionFactory ルックアップとまったく同じように動作します。ポータブルな方法で使用できます。

あるいは、たとえば Spring を認識しないコードなど、アプリケーションコードがルックアップパターン ConnectionFactory.create() で動作することを許可することもできます。その場合、ターゲット ConnectionFactoryTransactionAwareConnectionFactoryProxy を定義し、そのプロキシ ConnectionFactory を DAO に渡します。これにより、アクセス時に Spring が管理するトランザクションに自動的に参加します。

Spring の TransactionDefinition 属性は、拡張可能な R2DBC TransactionDefinition を使用して R2DBC ドライバーに引き継がれます。サブクラスは createTransactionDefinition(TransactionDefinition) をオーバーライドして、ベンダー固有の属性のトランザクション定義をカスタマイズできます。6.0.10 以降、このトランザクションマネージャーは、R2DBC セーブポイントを介したネストされたトランザクションもサポートします。

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

    • R2dbcTransactionManager

      public R2dbcTransactionManager()
      新しい R2dbcTransactionManager インスタンスを作成します。ConnectionFactory を使用するには、ConnectionFactory を設定する必要があります。
      関連事項:
    • R2dbcTransactionManager

      public R2dbcTransactionManager(ConnectionFactory connectionFactory)
      新しい R2dbcTransactionManager インスタンスを作成します。
      パラメーター:
      connectionFactory - トランザクションを管理する R2DBC ConnectionFactory
  • メソッドの詳細

    • setConnectionFactory

      public void setConnectionFactory(@Nullable ConnectionFactory connectionFactory)
      このインスタンスがトランザクションを管理する必要がある R2DBC ConnectionFactory を設定します。これは通常、ローカルに定義された ConnectionFactory (R2DBC 接続プールなど) です。

      ここで渡される ConnectionFactory は、独立した Connection を返す必要がありますConnection は通常、接続プールから取得されますが、ConnectionFactory は、特にスコープ指定された、または制約された Connection を返してはなりません。

    • getConnectionFactory

      @Nullable public ConnectionFactory getConnectionFactory()
      このインスタンスがトランザクションを管理する R2DBC ConnectionFactory を返します。
    • obtainConnectionFactory

      protected ConnectionFactory obtainConnectionFactory()
      実際に使用するために ConnectionFactory を取得します。
      戻り値:
      ConnectionFactory (非 null)
      例外:
      IllegalStateExceptionSE - ConnectionFactory セットがない場合
    • setEnforceReadOnly

      public void setEnforceReadOnly(boolean enforceReadOnly)
      トランザクション接続の明示的なステートメント(Oracle、MySQL、Postgres で理解される "SETTRANSACTION READ ONLY" )を使用して、トランザクションの読み取り専用の性質(TransactionDefinition.isReadOnly() で示される)を強制するかどうかを指定します。

      接続で実行される SQL ステートメントを含む正確な処理は、prepareTransactionalConnection(io.r2dbc.spi.Connection, org.springframework.transaction.TransactionDefinition) を使用してカスタマイズできます。

      関連事項:
    • isEnforceReadOnly

      public boolean isEnforceReadOnly()
      トランザクション接続で明示的なステートメントを使用して、トランザクションの読み取り専用の性質を強制するかどうかを返します。
      関連事項:
    • afterPropertiesSet

      public void afterPropertiesSet()
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
    • doGetTransaction

      protected ObjectSE doGetTransaction(TransactionSynchronizationManager synchronizationManager)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      現在のトランザクション状態のトランザクションオブジェクトを返します。

      返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有であり、対応するトランザクション状態を変更可能な形で保持します。このオブジェクトは、直接または DefaultReactiveTransactionStatus インスタンスの一部として、他のテンプレートメソッド(doBegin や doCommit など)に渡されます。

      返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の getTransaction 呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction 実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。

      次で指定:
      クラス AbstractReactiveTransactionManagerdoGetTransaction 
      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      戻り値:
      現在のトランザクションオブジェクト
      関連事項:
    • isExistingTransaction

      protected boolean isExistingTransaction(ObjectSE transaction)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。

      結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。

      デフォルト実装は false を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。

      オーバーライド:
      クラス AbstractReactiveTransactionManagerisExistingTransaction 
      パラメーター:
      transaction - doGetTransaction によって返されるトランザクションオブジェクト
      戻り値:
      既存のトランザクションがある場合
      関連事項:
    • doBegin

      protected reactor.core.publisher.Mono<VoidSE> doBegin(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。伝播動作の適用を気にする必要はありません。これは、この抽象マネージャーによってすでに処理されているためです。

      このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。

      特別なシナリオはネストされたトランザクションです。このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。

      次で指定:
      クラス AbstractReactiveTransactionManagerdoBegin 
      パラメーター:
      synchronizationManager - 新しいトランザクションにバインドされた同期マネージャー
      transaction - doGetTransaction によって返されるトランザクションオブジェクト
      definition - 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス
    • createTransactionDefinition

      protected TransactionDefinition createTransactionDefinition(TransactionDefinition definition)
      TransactionDefinition からトランザクション定義を決定します。オーバーライドして R2DBC TransactionDefinition をラップし、トランザクション属性を調整または強化できます。
      パラメーター:
      definition - トランザクション定義
      戻り値:
      使用する実際のトランザクション定義
      導入:
      6.0
      関連事項:
    • determineTimeout

      protected DurationSE determineTimeout(TransactionDefinition definition)
      特定の定義に使用する実際のタイムアウトを決定します。トランザクション定義でデフォルト以外の値が指定されていない場合、このマネージャーのデフォルトのタイムアウトにフォールバックします。
      パラメーター:
      definition - トランザクション定義
      戻り値:
      使用する実際のタイムアウト
      関連事項:
    • doSuspend

      protected reactor.core.publisher.Mono<ObjectSE> doSuspend(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。

      トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。

      オーバーライド:
      クラス AbstractReactiveTransactionManagerdoSuspend 
      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      transaction - doGetTransaction によって返されるトランザクションオブジェクト
      戻り値:
      中断されたリソースを保持するオブジェクト (doResume に渡すために未検査のままになります)
      関連事項:
    • doResume

      protected reactor.core.publisher.Mono<VoidSE> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable ObjectSE transaction, ObjectSE suspendedResources)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。

      トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。

      オーバーライド:
      クラス AbstractReactiveTransactionManagerdoResume 
      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      transaction - doGetTransaction によって返されるトランザクションオブジェクト
      suspendedResources - doSuspend によって返される、中断されたリソースを保持するオブジェクト
      関連事項:
    • doCommit

      protected reactor.core.publisher.Mono<VoidSE> doCommit(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      指定されたトランザクションの実際のコミットを実行します。

      実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。

      次で指定:
      クラス AbstractReactiveTransactionManagerdoCommit 
      パラメーター:
      TransactionSynchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      status - トランザクションのステータス表現
      関連事項:
    • doRollback

      protected reactor.core.publisher.Mono<VoidSE> doRollback(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      指定されたトランザクションの実際のロールバックを実行します。

      実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。

      次で指定:
      クラス AbstractReactiveTransactionManagerdoRollback 
      パラメーター:
      TransactionSynchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      status - トランザクションのステータス表現
      関連事項:
    • doSetRollbackOnly

      protected reactor.core.publisher.Mono<VoidSE> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。

      既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。

      オーバーライド:
      クラス AbstractReactiveTransactionManagerdoSetRollbackOnly 
      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      status - トランザクションのステータス表現
    • doCleanupAfterCompletion

      protected reactor.core.publisher.Mono<VoidSE> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction)
      クラスからコピーされた説明: AbstractReactiveTransactionManager
      トランザクション完了後にリソースをクリーンアップします。

      doCommit および doRollback の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。

      例外をスローするべきではなく、エラーに対して警告を発行するだけです。

      オーバーライド:
      クラス AbstractReactiveTransactionManagerdoCleanupAfterCompletion 
      パラメーター:
      synchronizationManager - 現在のトランザクションにバインドされた同期マネージャー
      transaction - doGetTransaction によって返されるトランザクションオブジェクト
    • prepareTransactionalConnection

      protected reactor.core.publisher.Mono<VoidSE> prepareTransactionalConnection(Connection con, TransactionDefinition definition)
      トランザクション開始直後にトランザクション Connection を準備します。

      "enforceReadOnly" フラグが true に設定され、トランザクション定義が読み取り専用トランザクションを示している場合、デフォルトの実装は "SET TRANSACTION READ ONLY" ステートメントを実行します。

      "SET TRANSACTION READ ONLY" は Oracle、MySQL、Postgres によって理解され、他のデータベースでも機能する場合があります。この処理を適用する場合は、それに応じてこのメソッドをオーバーライドします。

      パラメーター:
      con - トランザクション R2DBC 接続
      definition - 現在のトランザクション定義
      導入:
      5.3.22
      関連事項:
    • resolveIsolationLevel

      @Nullable protected IsolationLevel resolveIsolationLevel(int isolationLevel)
      分離レベル定数を R2DBC IsolationLevel に解決します。ベンダー固有の IsolationLevel の分離レベル変換を継承する場合は、それに応じてこのメソッドをオーバーライドします。
      パラメーター:
      isolationLevel - 変換する分離レベル。
      戻り値:
      解決された分離レベル。解決できない場合、または分離レベルを default のままにする必要がある場合は、null にすることができます。
      関連事項:
    • translateException

      protected RuntimeExceptionSE translateException(StringSE task, R2dbcException ex)
      指定された R2DBC コミット / ロールバック例外を一般的な Spring 例外に変換して、AbstractReactiveTransactionManager.commit(org.springframework.transaction.ReactiveTransaction)/AbstractReactiveTransactionManager.rollback(org.springframework.transaction.ReactiveTransaction) 呼び出しから伝達します。
      パラメーター:
      task - タスクの説明(コミットまたはロールバック)。
      ex - コミット / ロールバックからスローされる SQLException。
      戻り値:
      放出する変換された例外