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 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:
      getTransaction in interface org.springframework.transaction.PlatformTransactionManager
      Throws:
      org.springframework.transaction.TransactionException
    • commit

      public void commit(org.springframework.transaction.TransactionStatus status) throws org.springframework.transaction.TransactionException
      Specified by:
      commit in interface org.springframework.transaction.PlatformTransactionManager
      Throws:
      org.springframework.transaction.TransactionException
    • rollback

      public void rollback(org.springframework.transaction.TransactionStatus status) throws org.springframework.transaction.TransactionException
      Specified by:
      rollback in interface org.springframework.transaction.PlatformTransactionManager
      Throws:
      org.springframework.transaction.TransactionException
    • routeTopLevelTransactionToReadReplica

      public static boolean routeTopLevelTransactionToReadReplica()
    • isRouteTransactionsToReadReplica

      public boolean isRouteTransactionsToReadReplica()