@Transactional配置详解

一:事务注解@Transactional,属性propagation的7个配置

PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。,默认配置,也是常用的选择。
PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

二:每个配置的作用

A类中的方法methodA,B中的方法methodB

PROPAGATION_REQUIRED

如果当前有事务,则按照当前事务处理;如果当前没有事务,就新建一个事务。
例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_REQUIRED,那么如果methodA方法上有事务,那么methodB发现methodA有事务,则不会再创建事务,直接事务使用methodA的事务。如果methodA方法上没有事务,那么methodB会自己创建一个事务,只对methodB方法体中加入事务管理。

PROPAGATION_SUPPORTS

如果当前有事务,则按照当前事务处理;如果当前没有事务,就按照没有事务处理。
例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_SUPPORTS,那么如果methodA方法上有事务,那么methodB直接事务使用methodA的事务。如果methodA方法上没有事务,那么methodB方法体中也没有事务。

PROPAGATION_MANDATORY

如果当前有事务,则按照当前事务处理;如果当前没有事务,就抛出异常。
例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_MANDATORY,那么如果methodA方法上有事务,那么methodB直接事务使用methodA的事务。如果methodA方法上没有事务,那么直接抛出异常。

PROPAGATION_REQUIRES_NEW

不管当前是否有事务,都新建一个新的事务。
例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_REQUIRED_NEW,那么如果methodA方法上有事务,那么执行到methodB直接新建一个事务,把methodA的事务挂起,等待methodB的事务执行完毕,再进行执行methodA的事务。这样就存在两个事务,如果methodB已经提交,那么methodA失败回滚,methodB是不会回滚的;如果methodB失败回滚,他抛出的异常被DemoServiceA.demoMethodA捕获,methodA事务仍然可以提交。如果methodA方法上没有事务,那么新建事务执行。

PROPAGATION_NOT_SUPPORTED

不管当前是否有事务;都按照没有事务处理。

例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_NOT_SUPPORTED,那么如果methodA方法上有事务,那么执行到methodB时,methodA的事务挂起,methodB按照无事务处理,执行完后在执行methodA。如果methodA方法上没有事务,直接methodB方法体中也没有事务。

PROPAGATION_NEVER

如果当前有事务,则抛出异常;如果当前没有事务,就按照没有事务正常执行。

例子:
methodA中调用methodB,methodB的事务配置为PROPAGATION_NEVER,那么如果methodA方法上有事务,那么直接抛出异常。如果methodA方法上没有事务,那么按照没有事务正常执行。

PROPAGATION_NESTED

PROPAGATION_REQUIRED基本一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘德华一不小心就打代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值