項目中新增過程中如果出現異常需要回滾, 在service實現方法中使用@Transactional注解失效
解決:
1, 在controller中使用try{}catch捕捉異常
2, 在service實現中使用@Transactional注解
controller
@RequestMapping(value = "/add",method = RequestMethod.POST) @ResponseBody public Result add(HttpServletRequest request, @RequestBody User user){ Result result = new Result(); try{ result = service.insert(user); }catch (Exception e){ logger.error("失敗", e); } return result; }
service:
@Transactional(rollbackFor = Exception.class) 設置出現什么異常回滾, 默認情況下,spring會對unchecked異常進行事務回滾;如果是checked異常則不回滾
java里面將派生於Error或者RuntimeException(比如空指針,1/0)的異常稱為unchecked異常,
其他繼承自java.lang.Exception得異常統稱為Checked Exception,如IOException、TimeoutException等
@Override @Transactional(rollbackFor = Exception.class) public Result insert(User user){ Result result = new Result();int result = userMapper.insert(user);return result; }
總結: 異常捕獲在Controller去做,這樣在Service層中 @Transactional在發生異常時可以正常進行回滾操作。
參考: https://blog.csdn.net/flyaway86/article/details/81181346
