7.20_28期Spring事务角色

2023-07-28  本文已影响0人  萧修

事务管理员

事务协调员

本文以下面代码举例

@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;
    }
上一篇下一篇

猜你喜欢

热点阅读