Spring事務For循環中的代碼單獨爲一個事務,循環一次提交一次,只爲單個for循環單獨回滾

最近業務碰到for循環事務,每一個for循環中的代碼要單獨回滾單獨提交,不能影響外部代碼環境,研究過以後,記錄開發過程java

@Transactional(rollbackFor = Exception.class)
    public void aaa(List<String> toDoIds){
        for (String toDoId : toDoIds) {
            try {
                //內層新建事務,for循環內單個事務單個提交或者回滾<2>
                sissCommonService.aaa(toDoId);
            }catch (Exception e){
                e.printStackTrace();
            }
        }

    }

次代碼中原來aaa()這個方法是用this調用的,也就是事務方法嵌套,嵌套了以後,被嵌套的方法是不會有事務的,因而,我新建了一個公共Service用來解決事務嵌套的問題,在單獨提出來的方法上加上了事務,而且制定了事務的傳播機制爲Propagation.REQUIRES_NEW,具體代碼this

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
    public void updateOrderInfoPersonOutOrgan(String toDoId) throws Exception{
}

Propagation.REQUIRES_NEW的意思是,若是調用者當前有事務,就將事務掛起,從新開啓事務。這樣調用這個方法後,這個方法單獨開啓事務,每次執行完,單獨提交,遇到異常單獨回滾,外部方法收到拋出的異常並不處理就好,這樣內外事務互不影響。code

相關文章
相關標籤/搜索