Package ch.admin.bit.jeap.db.tx
Class ReadReplicaAwareTransactionManager
java.lang.Object
ch.admin.bit.jeap.db.tx.ReadReplicaAwareTransactionManager
- All Implemented Interfaces:
org.springframework.transaction.PlatformTransactionManager,org.springframework.transaction.TransactionManager
public class ReadReplicaAwareTransactionManager
extends Object
implements org.springframework.transaction.PlatformTransactionManager
This transaction manager keeps track of the readOnly value of top level transactions and sets this value to a
ThreadLocal, which can be used somewhere else, for instance by
ReadReplicaAwareTransactionRoutingDataSource to route to the
corresponding datasource.
This manager acts as a wrapper of a PlatformTransactionManager, delegating all transaction handling operations to it.
In addition to that, it checks the readOnly value of nested transactions and forbids creating a non-readonly transaction inside a top-level read-only one. This check preemptively avoids usage of nested transaction definitions not suitable for AWS RDS with "reader" endpoints.
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionReadReplicaAwareTransactionManager(org.springframework.transaction.PlatformTransactionManager delegate, boolean routeTransactionsToReadReplica, Supplier<io.micrometer.core.instrument.MeterRegistry> meterRegistrySupplier) -
Method Summary
Modifier and TypeMethodDescriptionvoidcommit(org.springframework.transaction.TransactionStatus status) org.springframework.transaction.TransactionStatusgetTransaction(org.springframework.transaction.TransactionDefinition definition) booleanvoidrollback(org.springframework.transaction.TransactionStatus status) static boolean
-
Constructor Details
-
ReadReplicaAwareTransactionManager
public ReadReplicaAwareTransactionManager(org.springframework.transaction.PlatformTransactionManager delegate, boolean routeTransactionsToReadReplica, Supplier<io.micrometer.core.instrument.MeterRegistry> meterRegistrySupplier)
-
-
Method Details
-
getTransaction
public org.springframework.transaction.TransactionStatus getTransaction(org.springframework.transaction.TransactionDefinition definition) throws org.springframework.transaction.TransactionException - Specified by:
getTransactionin interfaceorg.springframework.transaction.PlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
commit
public void commit(org.springframework.transaction.TransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
commitin interfaceorg.springframework.transaction.PlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
rollback
public void rollback(org.springframework.transaction.TransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
rollbackin interfaceorg.springframework.transaction.PlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
routeTopLevelTransactionToReadReplica
public static boolean routeTopLevelTransactionToReadReplica() -
isRouteTransactionsToReadReplica
public boolean isRouteTransactionsToReadReplica()
-