一、Spring 支持两种方式的事务管理:编程式事务管理、声明式事务管理。
1、编程式事务管理:通过TransactionTemplate或者TransactionManager手动管理事务,很少使用。
//使用TransactionTemplate 进行编程式事务管理的示例代码
@Autowired
private TransactionTemplate transactionTemplate;
public void testTransaction() {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
try {
// .... 业务代码
} catch (Exception e){
//回滚
transactionStatus.setRollbackOnly();
}
}
});
}
//使用 TransactionManager 进行编程式事务管理的示例代码
@Autowired
private PlatformTransactionManager transactionManager;
public void testTransaction(){
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try{
//......业务代码
transactionManager.commit(status);
}catch(Exception e){
transactionManager.rollback(status);
}
}
2、声明式事务管理:通过AOP实现(基于@Transactional的全注解方式使用最多),开发中多使用这个(代码侵入性最小)
//使用 @Transactional注解进行事务管理的示例代码
@Transactional(propagation = Propagation.REQUIRED)
public void aMethod{
//do something
Cat cat = new Cat();
Animal animal = new Animal();
animal.aMethod();
cat.cMethod();
}
二、Spring事务管理接口
Spring框架中,事务管理相关最重要的3个接口:
1、PlatformTransactionManager:(平台)事务管理器,Spring事务策略的核心。
2、TransactionDefinition:事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)。
3、TransactionStatus:事务运行状态。
PlatformTransactionManager接口可视为事务的管理者,TransactionDefinition和TransactionStatus可视为事务的描述。
PlatformTransactionManager会根据TransactionDefinition的定义如事务超时时间、隔离级别、传播行为等进行事务管理,TransactionStatus接口则提供一些方法来获取事务相应的状态比如是否新事务、是否可以回滚等。
A、PlatformTransactionManager:事务管理接口。Spring并不直接管理事务,而是提供多种事务管理器。通过这个接口为各个平台提供对应的事务管理器。
//Platfo