SpringBoot+mybatis使用@Transactional無效


項目中新增過程中如果出現異常需要回滾, 在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM