spring事物回滾遇到的問題

在service層使用聲明式事務添加@Transactional(rollbackFor = Exception.class)註解spring

多個方法進行數據庫操做,執行失敗則隱式的回滾事務,可是已經成功的發方法不會回滾,數據庫

想要,全部方法都回滾,須要手動try-catch,進行手動回滾(spring aop  異常捕獲原理:被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認狀況下aop只捕獲runtimeexception的異常spa

try {
            a.save();
            b.save();
        } catch (Exception e) {
            //方式一:aop捕獲RuntimeException異常回滾
            throw new RuntimeException();
            //方式二:
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            
        }
相關文章
相關標籤/搜索