1.在springConfig里开启事务处理模式
@EnableTransactionManagement//开启spring事务管理模式
2.在需要被事务管理的接口或方法上添加注解
@Transactional //配置当前接口方法具有事务
3.配置事务管理器
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource){
//创建一个事务管理器对象
DataSourceTransactionManager dataSourceTransactionManager = new
DataSourceTransactionManager();
//注入数据源Bean
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
4.设置需要回滚的异常类型(默认回滚的是1.运行时异常 2.ERROR)
@Transactional(rollbackFor = {Exception.class})
5.默认情况下,事务协调员会全部加入事务管理员的事务。
而有时需要设置事务协调员不加入事务管理员,例如:
try{
accountDao.outMoney(out,money);
int i = 1/0;
accountDao.inMoney(in,money);
}finally {
logService.log(out,in,money);
}
在银行转账时,我们希望在数据库中留下转账记录,无论转账这个事务执行成功与否。
按照默认设置,outMoney,inMoney和log三个事务会加入管理员成为一个事务,因此它们同成功同失败,无法实现上述需求。因此需要设置日志记录这个事务与管理员独立。设置方法如下:
public interface LogService {
//propagation设置事务属性:传播行为设置为当前操作需要新事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
void log(String out, String in, Double money);
}
在日志记录这个方法上添加注解propagation = Propagation.REQUIRES_NEW,表示无论是否存在默认事务(管理员),均为本事务新建一个事务。
本文介绍了如何在Spring框架中配置事务处理,包括开启事务管理、使用@Transactional注解标记事务接口,配置DataSourceTransactionManager,以及如何设置回滚规则和使用Propagation.REQUIRES_NEW来独立日志事务。
955

被折叠的 条评论
为什么被折叠?



