定義了一個service:UserService其中有個方法定義如下:@Transactional(propagation = Propagation.REQUIRES_NEW)public void saveException(User user){
userDao.save(user);
throw new RuntimeException("異常");
}如果我在Controller層直接調(diào)用這個方法,是可以進行回滾的,但如果我把這個方法再包一層,如下:public void saveInnerException() {
User user1 = new User();
user1.setName("李四");
this.saveException(user1);
}saveInnerException還是在同一個service中,并且這個方法沒有加事務(wù),這個時候,如果Controller層調(diào)用saveInnerException方法,事務(wù)會進行提交,這個很奇怪,發(fā)生了異常,應(yīng)該回滾才對。我又進行了另外的測試,這次我重新定義了一個service:UserService2,里邊有個非事務(wù)方法,如下:public void test(){
User user = new User();
user.setName("李四");
userService.saveException(user);
}如果Controller調(diào)用UserService2的test方法,這時事務(wù)就會回滾了。同樣是多了一層調(diào)用,結(jié)果為什么不一樣?
spring service方法拋出runtimeException但不回滾
料青山看我應(yīng)如是
2018-07-10 11:00:03