Class DataSourceTransactionManager
- All Implemented Interfaces:
io.micronaut.transaction.SynchronousTransactionManager<Connection>,io.micronaut.transaction.TransactionManager,io.micronaut.transaction.TransactionOperations<Connection>
DataSource transaction manager.
Partially based on https://github.com/spring-projects/spring-framework/blob/main/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java- Since:
- 4.0.0
-
Field Summary
Fields inherited from class io.micronaut.transaction.support.AbstractTransactionOperations
connectionOperations, logger, synchronousConnectionManager -
Constructor Summary
ConstructorsConstructorDescriptionDataSourceTransactionManager(@NonNull DataSource dataSource, io.micronaut.data.connection.ConnectionOperations<Connection> connectionOperations, @Nullable io.micronaut.data.connection.SynchronousConnectionManager<Connection> synchronousConnectionManager) Create a new DataSourceTransactionManager instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected voiddoBegin(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) protected voiddoCommit(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) protected voiddoNestedBegin(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) protected voiddoNestedCommit(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) protected voiddoNestedRollback(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) protected voiddoRollback(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) @NonNull Connection@NonNull DataSourcebooleanprotected voidprepareTransactionalConnection(Connection con, io.micronaut.transaction.TransactionDefinition definition) Prepare the transactionalConnectionright after transaction begin.voidsetEnforceReadOnly(boolean enforceReadOnly) Specify whether to enforce the read-only nature of a transaction (as indicated byTransactionDefinition.isReadOnly()) through an explicit statement on the transactional connection: "SET TRANSACTION READ ONLY" as understood by Oracle, MySQL and Postgres.Methods inherited from class io.micronaut.transaction.support.AbstractDefaultTransactionOperations
createExistingTransactionStatus, createNewTransactionStatus, createNoTxTransactionStatusMethods inherited from class io.micronaut.transaction.support.AbstractTransactionOperations
commit, determineTimeout, doExecute, doResume, doSuspend, getConnectionDefinition, getTransaction, hasConnection, rollback, suspendMethods inherited from class io.micronaut.transaction.support.AbstractPropagatedStatusTransactionOperations
execute, extendCurrentPropagatedContext, findTransactionStatusMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.micronaut.transaction.TransactionOperations
execute, executeRead, executeWrite, findTransactionStatus
-
Constructor Details
-
DataSourceTransactionManager
public DataSourceTransactionManager(@NonNull @NonNull DataSource dataSource, @Parameter io.micronaut.data.connection.ConnectionOperations<Connection> connectionOperations, @Parameter @Nullable @Nullable io.micronaut.data.connection.SynchronousConnectionManager<Connection> synchronousConnectionManager) Create a new DataSourceTransactionManager instance.- Parameters:
dataSource- the JDBC DataSource to manage transactions forconnectionOperations- the connection operationssynchronousConnectionManager- the synchronous connection operations
-
-
Method Details
-
getDataSource
- Returns:
- Return the JDBC DataSource that this instance manages transactions for.
-
setEnforceReadOnly
public void setEnforceReadOnly(boolean enforceReadOnly) Specify whether to enforce the read-only nature of a transaction (as indicated byTransactionDefinition.isReadOnly()) through an explicit statement on the transactional connection: "SET TRANSACTION READ ONLY" as understood by Oracle, MySQL and Postgres.The exact treatment, including any SQL statement executed on the connection, can be customized through
prepareTransactionalConnection(java.sql.Connection, io.micronaut.transaction.TransactionDefinition).This mode of read-only handling goes beyond the
Connection.setReadOnly(boolean)hint that Spring applies by default. In contrast to that standard JDBC hint, "SET TRANSACTION READ ONLY" enforces an isolation-level-like connection mode where data manipulation statements are strictly disallowed. Also, on Oracle, this read-only mode provides read consistency for the entire transaction.Note that older Oracle JDBC drivers (9i, 10g) used to enforce this read-only mode even for
Connection.setReadOnly(true. However, with recent drivers, this strong enforcement needs to be applied explicitly, e.g. through this flag.- Parameters:
enforceReadOnly- True if read-only should be enforced- Since:
- 4.3.7
- See Also:
-
isEnforceReadOnly
public boolean isEnforceReadOnly()- Returns:
- Return whether to enforce the read-only nature of a transaction through an explicit statement on the transactional connection.
- Since:
- 4.3.7
- See Also:
-
doBegin
- Specified by:
doBeginin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
doCommit
- Specified by:
doCommitin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
doRollback
protected void doRollback(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) - Specified by:
doRollbackin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
doNestedBegin
protected void doNestedBegin(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) - Overrides:
doNestedBeginin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
doNestedCommit
protected void doNestedCommit(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) - Overrides:
doNestedCommitin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
doNestedRollback
protected void doNestedRollback(io.micronaut.transaction.impl.DefaultTransactionStatus<Connection> status) - Overrides:
doNestedRollbackin classio.micronaut.transaction.support.AbstractTransactionOperations<io.micronaut.transaction.impl.DefaultTransactionStatus<Connection>,Connection>
-
prepareTransactionalConnection
protected void prepareTransactionalConnection(Connection con, io.micronaut.transaction.TransactionDefinition definition) throws SQLException Prepare the transactionalConnectionright after transaction begin.The default implementation executes a "SET TRANSACTION READ ONLY" statement if the
"enforceReadOnly"flag is set totrueand the transaction definition indicates a read-only transaction.The "SET TRANSACTION READ ONLY" is understood by Oracle, MySQL and Postgres and may work with other databases as well. If you'd like to adapt this treatment, override this method accordingly.
- Parameters:
con- the transactional JDBC Connectiondefinition- the current transaction definition- Throws:
SQLException- if thrown by JDBC API- Since:
- 4.3.7
- See Also:
-
getConnection
-