为了账号安全,请及时绑定邮箱和手机立即绑定

spring service方法抛出runtimeException但不回滚

spring service方法抛出runtimeException但不回滚

料青山看我应如是 2018-07-10 11:00:03
定义了一个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方法,这时事务就会回滚了。同样是多了一层调用,结果为什么不一样?
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

问题出在saveInnerException方法里的this
你不信单步调试跟踪下,你会发现this就是个普通实例而不是aop增强过的

查看完整回答
反对 回复 2018-07-15
  • 2 回答
  • 0 关注
  • 716 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信