@Transactional注解中事务的传播行为总结

@Transactional注解中事务的传播行为总结

在事务的注解@Transactional中的propagation字段定义了事务的传播行为

在这里插入图片描述

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。
事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。

在这里插入图片描述

@Transactional
    public void mulTx() {//这个事务嵌套了两个小事务
        
        bookService.check("Tom", "ISBN-001");
        
        bookService.updatePrice("ISBN-002", 998);
        
        
    }

对于上图,这三个方法都是通过注解的声明式事务。如果把内部两个事务的propagation字段的值设置为REQUIRED,那么他们会在mulTx的内部运行,当某一个事务异常,则整体回滚

此时,如果将updatePrice的propagation字段设置为REQUIRES_NEW,那么updatePrice会自己创建新的事务,check和mulTx则是绑定在一起的,如果updatePrice出错回滚,虽然他创建了新的事务,但是他将异常抛出,mulTx接收到这个异常,依旧会回滚。

如果将上面的方法的propagation字段设置为REQUIRES_NEW,当下面的方法出现异常,会回滚,但是上面的方法创建了自己的事务,在开启自己的事务之前将mulTx事务挂起,并且在下面的事务开启之前已经提交,数据库内容已经被修改,故不会受到影响

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值