spring 事务Propagation.REQUIRES_NEW 不起作用的原因

1、同一个业务类里面,调用内部被声明为 Propagation.REQUIRES_NEW的方法,也不会开启新事务,必须调用另一个类里面被声明为 Propagation.REQUIRES_NEW的方法方法才行。

2、或者在类内部autoweired自己(没试过):

class A {
   @Autowired
    private A a

    
    public void m1() {
        a.m2();
  }
    
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void m2() {}
}

3、调用的是AOP代理对象而不是目标对象,首先执行事务切面,事务切面内部通过TransactionInterceptor环绕增强进行事务的增强,即进入目标方法之前开启事务,退出目标方法时提交/回滚事务。

目标对象内部的自我调用将无法实施切面中的增强。

 

posted @ 2020-12-30 10:00  草长莺飞123  阅读(2818)  评论(0)    收藏  举报