事务管理员
事务协调员
本文以下面代码举例
@Service
public class AccountServiceimpl implements AccountService {
@Autowired
private AccountDao accountDao;
public void transfer(String out, String in, Double money) {
accountDao.outMoney(out,money);
accountDao.inMoney(in,money);
}
}
public interface AccountDao {
@Update("update account set money = money + #{money} where name = #{name}")
public void inMoney(@Param("name") String name,@Param("money") Double money);
@Update("update account set money = money - #{money} where name = #{name}")
public void outMoney(@Param("name")String name,@Param("money") Double money);
}
当transfer
被调用的时候,接口AccountDao
会执行update语句,对数据库进行修改操作,会开启事务
inMoney
开启事务1、outMoney
开启事务2,这两个事务不同,当某个事务出现出现失败,不会影响其他事务,事务1成功,出现异常,但是不影响事务2的执行,不会出现回滚
使用spring事务之后,会将上述两种事务加入到spring事务,这样出现业务异常时,就可以进行数据回滚
事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
事务协调员:加入事务方,在Spring中通常指数据层方法,也可以是业务层方法
里面通过相同dataSource
进行事务管理
@Bean
public PlatformTransactionManager transactionManager (DataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
网友评论