7种Spring的事务传播级别propagation

2 篇文章 0 订阅

Spring事务的传播级别(propagation)

@Transactional(propagation = Propagation.REQUIRED)
pubilc void methodA(){
        doSomething;
        methodB();
        doSomething;
}

@Transactional(propagation = Propagation.REQUIRED)
@Transactional(propagation = Propagation.REQUIRED_NEW)
@Transactional(propagation = Propagation.SUPPORTS)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
@Transactional(propagation = Propagation.MANDATORY)
@Transactional(propagation = Propagation.NEVER)
@Transactional(propagation = Propagation.NESTED)
pubilc void methodB(){
        doSomething;
}
  1. REQUIRED_NEW 无论如何都新建一个事务,与其他事务间互不影响。

    (始终独立成事务,自成自闭)
    若嵌套执行的方法要求各自事务独立,互不影响,则选择本传播级别。里是引用

  2. REQUIRED(默认) 可单独成一事务。若被其他事务包裹则加入该事务,成为其一部分。

    (平等加入,独立亦可成事务,自成融合)
    若嵌套执行的方法要求一起成功或者回滚,则选择本传播级别。

  3. SUPPORTS 单独不能成事务,只能依赖其他事务,成为其事务的一部分。

    (依赖加入,独立不能成事务,依附融合)
    若嵌套执行的方法要求一起成功或者回滚,单独执行时候以非事务方式执行,则选择本事物级别。

  4. MANDATORY 只能成为其他事务的一部分,单纯执行将报错。

    (强制加入,独立不可执行。寄生融合)
    若嵌套执行的方法要求一起执行成功或者一起回滚,不允许以不被事务包裹方式执行,则选择该事物传播级别。

  5. NESTED 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行。

    (巢筑,独立亦可成事务)
    若嵌套执行的方法要求内部方法出错只回滚自己,外部方法执行失败回滚所有,单独执行时候自动开启一个执行,则选择该事物传播级别。

  6. NOT_SUPPORTED 当前方法不应该有事务,如果有事务存在,将它挂起,以无事务状态运行

    (可被吞并,始终不支持事务。)
    (无事务,就是指底层的Connection对象的autoCommit、isolation等属性与数据库有关,与dataSource设置的属性有关,不会被Spring改变。)
    若嵌套执行的方法要求内部嵌套方法不会对外部方法事务造成影响并且内部方法不需要事务,单独执行时候亦以非事务方式执行,则选择该事物传播级别。

  7. NEVER 被事务强制包裹则抛出异常,单独执行时候必须以非事务方式执行。

    (不可被吞并,始终不支持事务。)
    若嵌套执行的方法要求内部方法不允许在事务中执行,单独执行时候必须以非事务方式执行,则选择该事物传播级别。

REQUIRED_NEW 、REQUIRED 和 NESTED的异同

相同:
如不在事务中,都会创建一个新的事务

不同:
如果在事务中:
REQUIRED_NEW:父子事务互不影响;
REQUIRED:会跟着父任务一同提交,一同失败 ;
NESTED:是如果当前事务出现异常,本身进行回滚操作,但是父任务不会进行回滚操作,不过如果父任务发生异常,子任务会进行回滚操作 。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值