Spring Notes (4) - Transaction Management
Transaction Reference propagation behaviors
Transaction: https://segmentfault.com/a/1190000013341344
Transaction Isolation Levels
- isolation: Specifies transaction isolation level. Default is DEFAULT (use database’s default).
Transaction Propagation
- propagation: Specifies transaction propagation behavior. Default is REQUIRED (for insert/update/delete). Use SUPPORTS for queries.
Transaction Properties
- read-only: Specifies if transaction is read-only. Use true for queries, default is false.
- timeout: Transaction timeout in seconds. Default is -1 (no timeout).
- rollback-for: Specifies an exception that triggers rollback. Any other exceptions won’t trigger rollback. Default is any exception triggers rollback.
- no-rollback-for: Specifies an exception that doesn’t trigger rollback. Any other exceptions trigger rollback.
Programmatic Transaction Management
@Autowired
private DataSourceTransactionManager transactionManager;
public void transfer() {
TransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(definition);
try {
// business logic
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
}
Declarative Transaction Management (XML)
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
Declarative Transaction Management (Annotation)
@Transactional(propagation = Propagation.REQUIRED)
public void transfer(String from, String to, double amount) {
// business logic
}
Summary
Spring provides flexible transaction management through both programmatic and declarative approaches.