定義了一個service:UserService其中有個方法定義如下:@Transactional(propagation=Propagation.REQUIRES_NEW)publicvoidsaveException(Useruser){userDao.save(user);thrownewRuntimeException("異常");}如果我在Controller層直接調(diào)用這個方法,是可以進行回滾的,但如果我把這個方法再包一層,如下:publicvoidsaveInnerException(){Useruser1=newUser();user1.setName("李四");this.saveException(user1);}saveInnerException還是在同一個service中,并且這個方法沒有加事務(wù),這個時候,如果Controller層調(diào)用saveInnerException方法,事務(wù)會進行提交,這個很奇怪,發(fā)生了異常,應(yīng)該回滾才對。我又進行了另外的測試,這次我重新定義了一個service:UserService2,里邊有個非事務(wù)方法,如下:publicvoidtest(){Useruser=newUser();user.setName("李四");userService.saveException(user);}如果Controller調(diào)用UserService2的test方法,這時事務(wù)就會回滾了。同樣是多了一層調(diào)用,結(jié)果為什么不一樣?
spring service方法拋出runtimeException但不回滾
搖曳的薔薇
2019-05-13 09:41:36