Spring主動觸發事務回滾


前言:

Spring的事務回滾采用@Transactional,當方法中拋出異常時,會觸發事務回滾。

如果沒有異常,根據業務邏輯,想要主動觸發事務回滾,要怎么實現呢?例如,調用一個第三方接口,如果返回值不是200,就要觸發事務回滾。這期間並沒有代碼錯誤而拋出異常,只是根據接口的返回值來判斷是否回滾。

方法一:

throw new RuntimeException(); 

方法二:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

實測:數據庫中沒有新增數據

    @Test
    @Transactional
    public void contextLoads3() throws Exception{
        //創建對象
        Game g1 = new Game();
        g1.setName("test");
        g1.setPicUrl("111");
        g1.setType(1);
        //新增到數據庫
        gameRepository.save(g1);
        if(true){
            //throw new RuntimeException();//主動拋出異常
            //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//調用事務回滾的方法
        }
    }

 


免責聲明!

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



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