spring service方法抛出runtimeException但不回滚

定义了一个service:UserService其中有个方法定义如下:

@Transactional(propagation = Propagation.REQUIRES_NEW)public void saveException(User user){
    userDao.save(user);    
    throw new RuntimeException("异常");
}

如果我在Controller层直接调用这个方法,是可以进行回滚的,但如果我把这个方法再包一层,如下:

public void saveInnerException() {
    User user1 = new User();
    user1.setName("李四");    
    this.saveException(user1);
}

saveInnerException还是在同一个service中,并且这个方法没有加事务,这个时候,如果Controller层调用saveInnerException方法,事务会进行提交,这个很奇怪,发生了异常,应该回滚才对。
我又进行了另外的测试,这次我重新定义了一个service:UserService2,里边有个非事务方法,如下:

public void test(){    
    User user = new User();    
    user.setName("李四");
   userService.saveException(user);
}

如果Controller调用UserService2的test方法,这时事务就会回滚了。同样是多了一层调用,结果为什么不一样?


料青山看我应如是
浏览 717回答 2
2回答

慕妹3242003

问题出在saveInnerException方法里的this你不信单步调试跟踪下,你会发现this就是个普通实例而不是aop增强过的
打开App,查看更多内容
随时随地看视频慕课网APP