事物传播行为:propagation = Propagation.REQUIRES_NEW 不生效问题

在这里插入图片描述

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, rollbackFor = {Throwable.class}, readOnly = false)

传播行为:propagation = Propagation.REQUIRES_NEW 不生效问题
因为:
由于this对象没被spring代理生成新的代理对象,而是本类的上下文方法上的事物注解不会起作用
当前类的对象没有被springAOP代理,对于方法上的事物是不起作用的,因为AOP切面编程是需要代理对象才能生效,而this是本类的对象,不存在代理

解决方法:
在该方法 insertWealthClTLog() 不要和调用它的方法写到同一个类里即可。

(转)
以下讨论基于A.methoda()调用B.methodb();
若B的事务隔离级别为:

PROPAGATION_REQUIRED:(外面影响里面,里面不影响外面)
若A的方法没有事务,则创建一个新事务,若有事务,则加入当前事务。
如果A的方法a抛出异常,则A,B的方法都会回滚,
如果B的方法b抛出异常,则看A有没有捕获,没有捕获的话,A会回滚,捕获了的话,则会抛出新的异常,不会回滚

PROPAGATION_REQUIRES_NEW:(外面不影响里面,里面(不)影响外面)
若A的方法没有事务,则新建一个事务,若有事务,就创建一个新事务。
若A的方法有事务,
如果A的方法a抛出异常,则A的事务回滚,B的事务不受影响
如果B的方法b抛出异常,则B回滚,A不捕获则回滚,捕获则不受影响

PROPAGATION_NESTED :(外面的影响里面的,里面的(不)影响外面的)
若A的方法没有事务,则新建一个事务,若有事务,则在里面嵌套一个事务。
若A的方法没有事务,
如果B的方法b抛出异常,则B回滚,A不回滚;
如果A的方法a抛出异常,则都不回滚
若A的方法有事务:
如果B的方法抛出异常,则B回滚
如果A的方法不捕获异常,则回滚,捕获则不回滚
如果A的方法抛出异常,则都回滚

PROPAGATION_SUPPORTS:(外面的影响里面的,里面的影响外面的)
如果A没有事务,则B以非事务的方式运行,如果A有事务,则使用当前事务;
如果A没有事务,则A和B的运行出现异常都不会回滚
如果A有事务,
A的方法a抛出异常,A和B都会回滚。
B的方法b抛出异常,A和B都会回滚。

PROPAGATION_NOT_SUPPORTED:
如果A没有事务,就以非事务方式执行,如果有,就将当前事务挂起。

PROPAGATION_NEVER:
如果A没有事务,就以非事务方式执行,如果有,就抛出异常。

PROPAGATION_MANDATORY:(外面的影响里面的,里面的影响外面的)
如果A没有事务,就抛出异常,如果A有事务,就使用当前事务。
如果A有事务
如果A的方法抛出异常,则A和B都会回滚
如果B的方法抛出异常,则A和B也都会回滚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值