定義了一個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方法,這時事務就會回滾了。同樣是多了一層調用,結果為什么不一樣?
spring service方法拋出runtimeException但不回滾
料青山看我應如是
2018-07-10 11:00:03