public class TransactionSynchronizationManager extends ObjectSE
上書きせずにキーごとに 1 つのリソースをサポートします。つまり、同じキーに新しいリソースを設定する前にリソースを削除する必要があります。同期がアクティブな場合、トランザクション同期のリストをサポートします。
リソース管理コードは、コンテキストにバインドされたリソースを確認する必要があります。getResource
を介したデータベース接続。通常、このようなコードはリソースを作業単位にバインドすることは想定されていません。これはトランザクションマネージャーの責任であるためです。さらなるオプションは、任意の数のリソースにまたがるトランザクションを実行するために、トランザクション同期がアクティブな場合、最初の使用時に遅延バインドすることです。
トランザクションの同期は、initSynchronization()
および clearSynchronization()
を介してトランザクションマネージャーによってアクティブ化および非アクティブ化する必要があります。これは AbstractReactiveTransactionManager
によって自動的にサポートされるため、すべての標準 Spring トランザクションマネージャーによってサポートされます。
リソース管理コードは、このマネージャーがアクティブな場合にのみ同期を登録する必要があります。これは、isSynchronizationActive()
を介して確認できます。それ以外の場合は、すぐにリソースのクリーンアップを実行する必要があります。トランザクションの同期がアクティブでない場合、現在のトランザクションがないか、トランザクションマネージャーがトランザクションの同期をサポートしていません。
同期は、たとえば、トランザクション内で常に同じリソースを返すために使用されます。特定の接続ファクトリのデータベース接続。
isSynchronizationActive()
, registerSynchronization(org.springframework.transaction.reactive.TransactionSynchronization)
, TransactionSynchronization
コンストラクターと説明 |
---|
TransactionSynchronizationManager(TransactionContext transactionContext) |
修飾子と型 | メソッドと説明 |
---|---|
void | bindResource(ObjectSE key, ObjectSE value) 指定されたキーの指定されたリソースを現在のコンテキストにバインドします。 |
void | clear() トランザクションの同期状態全体をクリアします。登録された同期とさまざまなトランザクション特性。 |
void | clearSynchronization() 現在のコンテキストのトランザクション同期を非アクティブ化します。 |
static reactor.core.publisher.Mono<TransactionSynchronizationManager> | forCurrentTransaction() 現在のトランザクションコンテキストに関連付けられている TransactionSynchronizationManager を取得します。 |
IntegerSE | getCurrentTransactionIsolationLevel() 存在する場合、現在のトランザクションの分離レベルを返します。 |
StringSE | getCurrentTransactionName() 現在のトランザクションの名前、または何も設定されていない場合は null を返します。 |
ObjectSE | getResource(ObjectSE key) 現在のスレッドにバインドされている特定のキーのリソースを取得します。 |
ListSE<TransactionSynchronization> | getSynchronizations() 現在のコンテキストに登録されているすべての同期の変更不可能なスナップショットリストを返します。 |
boolean | hasResource(ObjectSE key) 現在のスレッドにバインドされた特定のキーのリソースがあるかどうかを確認します。 |
void | initSynchronization() 現在のコンテキストのトランザクション同期をアクティブにします。 |
boolean | isActualTransactionActive() 現在アクティブな実際のトランザクションがあるかどうかを返します。 |
boolean | isCurrentTransactionReadOnly() 現在のトランザクションが読み取り専用としてマークされているかどうかを返します。 |
boolean | isSynchronizationActive() 現在のコンテキストでトランザクション同期がアクティブな場合に戻ります。 |
void | registerSynchronization(TransactionSynchronization synchronization) 現在のコンテキストの新しいトランザクション同期を登録します。 |
void | setActualTransactionActive(boolean active) 現在アクティブな実際のトランザクションがあるかどうかを公開します。 |
void | setCurrentTransactionIsolationLevel(IntegerSE isolationLevel) 現在のトランザクションの分離レベルを公開します。 |
void | setCurrentTransactionName(StringSE name) 存在する場合、現在のトランザクションの名前を公開します。 |
void | setCurrentTransactionReadOnly(boolean readOnly) 現在のトランザクションの読み取り専用フラグを公開します。 |
ObjectSE | unbindResource(ObjectSE key) 現在のコンテキストから特定のキーのリソースをバインド解除します。 |
ObjectSE | unbindResourceIfPossible(ObjectSE key) 現在のコンテキストから特定のキーのリソースをバインド解除します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public TransactionSynchronizationManager(TransactionContext transactionContext)
public static reactor.core.publisher.Mono<TransactionSynchronizationManager> forCurrentTransaction()
TransactionSynchronizationManager
を取得します。主に、リソースまたは同期をバインドするコードを対象としています。
NoTransactionException
- トランザクション情報が見つからない場合 — たとえば、メソッドがマネージドトランザクションの外部で呼び出されたため public boolean hasResource(ObjectSE key)
key
- チェックするキー (通常、リソースファクトリ)@Nullable public ObjectSE getResource(ObjectSE key)
key
- チェックするキー (通常、リソースファクトリ)null
public void bindResource(ObjectSE key, ObjectSE value) throws IllegalStateExceptionSE
key
- 値をバインドするキー (通常、リソースファクトリ)value
- バインドする値 (通常、アクティブなリソースオブジェクト)IllegalStateExceptionSE
- コンテキストにバインドされた値がすでにある場合 public ObjectSE unbindResource(ObjectSE key) throws IllegalStateExceptionSE
key
- バインドを解除するキー (通常、リソースファクトリ)IllegalStateExceptionSE
- コンテキストにバインドされた値がない場合 @Nullable public ObjectSE unbindResourceIfPossible(ObjectSE key)
key
- バインドを解除するキー (通常、リソースファクトリ)null
public boolean isSynchronizationActive()
public void initSynchronization() throws IllegalStateExceptionSE
IllegalStateExceptionSE
- 同期がすでにアクティブな場合 public void registerSynchronization(TransactionSynchronization synchronization) throws IllegalStateExceptionSE
同期により Ordered
インターフェースを実装できることに注意してください。それらは、オーダー値に応じた順序で実行されます(ある場合)。
synchronization
- 登録する同期オブジェクト IllegalStateExceptionSE
- トランザクション同期がアクティブでない場合 Ordered
public ListSE<TransactionSynchronization> getSynchronizations() throws IllegalStateExceptionSE
IllegalStateExceptionSE
- 同期がアクティブでない場合 TransactionSynchronization
public void clearSynchronization() throws IllegalStateExceptionSE
IllegalStateExceptionSE
- 同期がアクティブでない場合 public void setCurrentTransactionName(@Nullable StringSE name)
name
- トランザクションの名前、またはそれをリセットする null
TransactionDefinition.getName()
@Nullable public StringSE getCurrentTransactionName()
null
を返します。特定の名前付きトランザクションのフェッチ戦略を最適化するなど、ユースケースごとの最適化のためにリソース管理コードによって呼び出されます。public void setCurrentTransactionReadOnly(boolean readOnly)
readOnly
- 現在のトランザクションを読み取り専用としてマークする true
。このような読み取り専用マーカーをリセットする false
TransactionDefinition.isReadOnly()
public boolean isCurrentTransactionReadOnly()
トランザクションの同期は、コミット時の変更検出を抑制することができるように、beforeCommit
コールバックの引数として読み取り専用フラグを受け取ることに注意してください。このメソッドは、以前の読み取り専用チェックに使用することを目的としています。
public void setCurrentTransactionIsolationLevel(@Nullable IntegerSE isolationLevel)
isolationLevel
- R2DBC 接続定数(対応する Spring TransactionDefinition 定数に相当)に応じて公開する分離レベル、またはそれをリセットする null
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
, TransactionDefinition.ISOLATION_READ_COMMITTED
, TransactionDefinition.ISOLATION_REPEATABLE_READ
, TransactionDefinition.ISOLATION_SERIALIZABLE
, TransactionDefinition.getIsolationLevel()
@Nullable public IntegerSE getCurrentTransactionIsolationLevel()
null
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
, TransactionDefinition.ISOLATION_READ_COMMITTED
, TransactionDefinition.ISOLATION_REPEATABLE_READ
, TransactionDefinition.ISOLATION_SERIALIZABLE
, TransactionDefinition.getIsolationLevel()
public void setActualTransactionActive(boolean active)
active
- 現在のコンテキストを実際のトランザクションに関連付けられているものとしてマークする true
。そのマーカーをリセットする false
public boolean isActualTransactionActive()
アクティブなトランザクション同期(バッキングリソーストランザクションの有無に関係なく、PROPAGATION_SUPPORTS でも)とアクティブな実際のトランザクション(バッキングリソーストランザクションで、PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW など)を区別するリソース管理コードによって呼び出されます。
public void clear()