クラス R2dbcTransactionManager
- 実装されたすべてのインターフェース:
SerializableSE
、InitializingBean
、ConfigurableTransactionManager
、ReactiveTransactionManager
、TransactionManager
ConnectionFactory
の ReactiveTransactionManager
実装。このクラスは、セットアップで 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()
で動作することを許可することもできます。その場合、ターゲット ConnectionFactory
の TransactionAwareConnectionFactoryProxy
を定義し、そのプロキシ ConnectionFactory
を DAO に渡します。これにより、アクセス時に Spring が管理するトランザクションに自動的に参加します。
Spring の TransactionDefinition
属性は、拡張可能な R2DBC TransactionDefinition
を使用して R2DBC ドライバーに引き継がれます。サブクラスは createTransactionDefinition(TransactionDefinition)
をオーバーライドして、ベンダー固有の属性のトランザクション定義をカスタマイズできます。6.0.10 以降、このトランザクションマネージャーは、R2DBC セーブポイントを介したネストされたトランザクションもサポートします。
ネストされたクラスのサマリー
クラス org.springframework.transaction.reactive.AbstractReactiveTransactionManager から継承されたネストクラス / インターフェース
AbstractReactiveTransactionManager.SuspendedResourcesHolder
フィールドサマリー
クラス org.springframework.transaction.reactive.AbstractReactiveTransactionManager から継承されたフィールド
logger
コンストラクターのサマリー
コンストラクター説明新しいR2dbcTransactionManager
インスタンスを作成します。R2dbcTransactionManager
(ConnectionFactory connectionFactory) 新しいR2dbcTransactionManager
インスタンスを作成します。方法の概要
修飾子と型メソッド説明void
protected TransactionDefinition
createTransactionDefinition
(TransactionDefinition definition) TransactionDefinition
からトランザクション定義を決定します。protected DurationSE
determineTimeout
(TransactionDefinition definition) 特定の定義に使用する実際のタイムアウトを決定します。protected reactor.core.publisher.Mono<VoidSE>
doBegin
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition) 指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。protected reactor.core.publisher.Mono<VoidSE>
doCleanupAfterCompletion
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) トランザクション完了後にリソースをクリーンアップします。protected reactor.core.publisher.Mono<VoidSE>
doCommit
(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションの実際のコミットを実行します。protected ObjectSE
doGetTransaction
(TransactionSynchronizationManager synchronizationManager) 現在のトランザクション状態のトランザクションオブジェクトを返します。protected reactor.core.publisher.Mono<VoidSE>
doResume
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, ObjectSE suspendedResources) 現在のトランザクションのリソースを再開します。protected reactor.core.publisher.Mono<VoidSE>
doRollback
(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションの実際のロールバックを実行します。protected reactor.core.publisher.Mono<VoidSE>
doSetRollbackOnly
(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) 指定されたトランザクションをロールバックのみに設定します。protected reactor.core.publisher.Mono<ObjectSE>
doSuspend
(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) 現在のトランザクションのリソースを一時停止します。このインスタンスがトランザクションを管理する R2DBCConnectionFactory
を返します。boolean
トランザクション接続で明示的なステートメントを使用して、トランザクションの読み取り専用の性質を強制するかどうかを返します。protected boolean
isExistingTransaction
(ObjectSE transaction) 指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。protected ConnectionFactory
実際に使用するためにConnectionFactory
を取得します。protected reactor.core.publisher.Mono<VoidSE>
prepareTransactionalConnection
(Connection con, TransactionDefinition definition) トランザクション開始直後にトランザクションConnection
を準備します。protected IsolationLevel
resolveIsolationLevel
(int isolationLevel) 分離レベル定数を R2DBCIsolationLevel
に解決します。void
setConnectionFactory
(ConnectionFactory connectionFactory) このインスタンスがトランザクションを管理する R2DBCConnectionFactory
を設定します。void
setEnforceReadOnly
(boolean enforceReadOnly) トランザクション接続の明示的なステートメント(Oracle、MySQL、Postgres で理解される "SETTRANSACTION READ ONLY" )を使用して、トランザクションの読み取り専用の性質(TransactionDefinition.isReadOnly()
で示される)を強制するかどうかを指定します。protected RuntimeExceptionSE
translateException
(StringSE task, R2dbcException ex) 指定された R2DBC コミット / ロールバック例外を一般的な Spring 例外に変換して、AbstractReactiveTransactionManager.commit(org.springframework.transaction.ReactiveTransaction)
/AbstractReactiveTransactionManager.rollback(org.springframework.transaction.ReactiveTransaction)
呼び出しから伝達します。クラス org.springframework.transaction.reactive.AbstractReactiveTransactionManager から継承されたメソッド
commit, getReactiveTransaction, getTransactionExecutionListeners, prepareForCommit, registerAfterCompletionWithExistingTransaction, rollback, setTransactionExecutionListeners
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.transaction.ConfigurableTransactionManager から継承されたメソッド
addListener
コンストラクターの詳細
R2dbcTransactionManager
public R2dbcTransactionManager()新しいR2dbcTransactionManager
インスタンスを作成します。ConnectionFactory
を使用するには、ConnectionFactory
を設定する必要があります。R2dbcTransactionManager
新しいR2dbcTransactionManager
インスタンスを作成します。- パラメーター:
connectionFactory
- トランザクションを管理する R2DBC ConnectionFactory
メソッドの詳細
setConnectionFactory
このインスタンスがトランザクションを管理する必要がある R2DBCConnectionFactory
を設定します。これは通常、ローカルに定義されたConnectionFactory
(R2DBC 接続プールなど) です。ここで渡される
ConnectionFactory
は、独立したConnection
を返す必要があります。Connection
は通常、接続プールから取得されますが、ConnectionFactory
は、特にスコープ指定された、または制約されたConnection
を返してはなりません。getConnectionFactory
このインスタンスがトランザクションを管理する R2DBCConnectionFactory
を返します。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 プロパティを設定し、BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
doGetTransaction
クラスからコピーされた説明:AbstractReactiveTransactionManager
現在のトランザクション状態のトランザクションオブジェクトを返します。返されるオブジェクトは通常、具体的なトランザクションマネージャーの実装に固有のものであり、対応するトランザクション状態を変更可能な形式で保持します。このオブジェクトは、他のテンプレートメソッド (doBegin や doCommit など) に直接、または DefaultReactiveTransactionStatus インスタンスの一部として渡されます。
返されるオブジェクトには、既存のトランザクション、つまり、トランザクションマネージャーでの現在の
getTransaction
呼び出しの前にすでに開始されているトランザクションに関する情報が含まれている必要があります。その結果、doGetTransaction
実装は通常、既存のトランザクションを探し、返されたトランザクションオブジェクトに対応する状態を格納します。- 次で指定:
- クラス
AbstractReactiveTransactionManager
のdoGetTransaction
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャー- 戻り値:
- 現在のトランザクションオブジェクト
- 関連事項:
AbstractReactiveTransactionManager.doBegin(org.springframework.transaction.reactive.TransactionSynchronizationManager, java.lang.Object, org.springframework.transaction.TransactionDefinition)
AbstractReactiveTransactionManager.doCommit(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
AbstractReactiveTransactionManager.doRollback(org.springframework.transaction.reactive.TransactionSynchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction)
GenericReactiveTransaction.getTransaction()
isExistingTransaction
クラスからコピーされた説明:AbstractReactiveTransactionManager
指定されたトランザクションオブジェクトが既存のトランザクション(つまり、すでに開始されているトランザクション)を示しているかどうかを確認します。結果は、新しいトランザクションに対して指定された伝播動作に従って評価されます。既存のトランザクションが中断される(PROPAGATION_REQUIRES_NEW の場合)か、新しいトランザクションが既存のトランザクションに参加する可能性があります(PROPAGATION_REQUIRED の場合)。
デフォルト実装は
false
を返しますが、既存のトランザクションへの参加は一般にサポートされていないと想定しています。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。- オーバーライド:
- クラス
AbstractReactiveTransactionManager
のisExistingTransaction
- パラメーター:
transaction
- doGetTransaction によって返されるトランザクションオブジェクト- 戻り値:
- 既存のトランザクションがある場合
- 関連事項:
doBegin
protected reactor.core.publisher.Mono<VoidSE> doBegin(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction, TransactionDefinition definition) クラスからコピーされた説明:AbstractReactiveTransactionManager
指定されたトランザクション定義に従って、セマンティクスで新しいトランザクションを開始します。伝播動作の適用を気にする必要はありません。これは、この抽象マネージャーによってすでに処理されているためです。このメソッドは、トランザクションマネージャーが実際に新しいトランザクションを開始することを決定したときに呼び出されます。以前にトランザクションがなかったか、前のトランザクションが中断されています。
特別なシナリオはネストされたトランザクションです。このメソッドは、必要に応じてネストされたトランザクションを開始するために呼び出されます。このようなコンテキストでは、アクティブなトランザクションがあります。このメソッドの実装はこれを検出し、適切なネストされたトランザクションを開始する必要があります。
- 次で指定:
- クラス
AbstractReactiveTransactionManager
のdoBegin
- パラメーター:
synchronizationManager
- 新しいトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクトdefinition
- 伝播動作、分離レベル、読み取り専用フラグ、タイムアウト、トランザクション名を記述する TransactionDefinition インスタンス
createTransactionDefinition
TransactionDefinition
からトランザクション定義を決定します。オーバーライドして R2DBCTransactionDefinition
をラップし、トランザクション属性を調整または強化できます。- パラメーター:
definition
- トランザクション定義- 戻り値:
- 使用する実際のトランザクション定義
- 導入:
- 6.0
- 関連事項:
determineTimeout
特定の定義に使用する実際のタイムアウトを決定します。トランザクション定義でデフォルト以外の値が指定されていない場合、このマネージャーのデフォルトのタイムアウトにフォールバックします。- パラメーター:
definition
- トランザクション定義- 戻り値:
- 使用する実際のタイムアウト
- 関連事項:
doSuspend
protected reactor.core.publisher.Mono<ObjectSE> doSuspend(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) クラスからコピーされた説明:AbstractReactiveTransactionManager
現在のトランザクションのリソースを一時停止します。トランザクションの同期はすでに中断されています。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractReactiveTransactionManager
のdoSuspend
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクト- 戻り値:
- 中断されたリソースを保持するオブジェクト (doResume に渡すために検査されないままになります)
- 関連事項:
doResume
protected reactor.core.publisher.Mono<VoidSE> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable ObjectSE transaction, ObjectSE suspendedResources) クラスからコピーされた説明:AbstractReactiveTransactionManager
現在のトランザクションのリソースを再開します。トランザクションの同期はその後再開されます。トランザクションの一時停止が一般的にサポートされていないと仮定すると、デフォルトの実装は TransactionSuspensionNotSupportedException をスローします。
- オーバーライド:
- クラス
AbstractReactiveTransactionManager
のdoResume
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーtransaction
-doGetTransaction
によって返されるトランザクションオブジェクトsuspendedResources
- doSuspend によって返される、中断されたリソースを保持するオブジェクト- 関連事項:
doCommit
protected reactor.core.publisher.Mono<VoidSE> doCommit(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status) クラスからコピーされた説明:AbstractReactiveTransactionManager
指定されたトランザクションの実際のコミットを実行します。実装では、「新規トランザクション」フラグまたはロールバック専用フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートコミットが実行されます。
- 次で指定:
- クラス
AbstractReactiveTransactionManager
のdoCommit
- パラメーター:
TransactionSynchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 関連事項:
doRollback
protected reactor.core.publisher.Mono<VoidSE> doRollback(TransactionSynchronizationManager TransactionSynchronizationManager, GenericReactiveTransaction status) クラスからコピーされた説明:AbstractReactiveTransactionManager
指定されたトランザクションの実際のロールバックを実行します。実装では、「新しいトランザクション」フラグを確認する必要はありません。これはすでに以前に処理されています。通常、渡されたステータスに含まれるトランザクションオブジェクトに対してストレートロールバックが実行されます。
- 次で指定:
- クラス
AbstractReactiveTransactionManager
のdoRollback
- パラメーター:
TransactionSynchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現- 関連事項:
doSetRollbackOnly
protected reactor.core.publisher.Mono<VoidSE> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) クラスからコピーされた説明:AbstractReactiveTransactionManager
指定されたトランザクションをロールバックのみに設定します。現在のトランザクションが既存のトランザクションに参加している場合にのみ、ロールバック時に呼び出されます。既存のトランザクションへの参加は一般にサポートされていないと想定して、デフォルトの実装は IllegalTransactionStateException をスローします。もちろん、サブクラスはそのようなサポートを提供することをお勧めします。
- オーバーライド:
- クラス
AbstractReactiveTransactionManager
のdoSetRollbackOnly
- パラメーター:
synchronizationManager
- 現在のトランザクションにバインドされた同期マネージャーstatus
- トランザクションのステータス表現
doCleanupAfterCompletion
protected reactor.core.publisher.Mono<VoidSE> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, ObjectSE transaction) クラスからコピーされた説明:AbstractReactiveTransactionManager
トランザクション完了後にリソースをクリーンアップします。doCommit
およびdoRollback
の実行後に、結果について呼び出されます。デフォルトの実装は何もしません。例外をスローするべきではなく、エラーに対して警告を発行するだけです。
- オーバーライド:
- クラス
AbstractReactiveTransactionManager
のdoCleanupAfterCompletion
- パラメーター:
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
分離レベル定数を R2DBCIsolationLevel
に解決します。ベンダー固有のIsolationLevel
の分離レベル変換を継承する場合は、それに応じてこのメソッドをオーバーライドします。- パラメーター:
isolationLevel
- 変換する分離レベル。- 戻り値:
- 解決された分離レベル。解決できない場合、または分離レベルを
default
のままにする必要がある場合は、null
にすることができます。 - 関連事項:
translateException
指定された R2DBC コミット / ロールバック例外を一般的な Spring 例外に変換して、AbstractReactiveTransactionManager.commit(org.springframework.transaction.ReactiveTransaction)
/AbstractReactiveTransactionManager.rollback(org.springframework.transaction.ReactiveTransaction)
呼び出しから伝達します。- パラメーター:
task
- タスクの説明(コミットまたはロールバック)。ex
- コミット / ロールバックからスローされる SQLException。- 戻り値:
- 放出する変換された例外