Spring Boot + Mybatis Plus中事務筆記

 

使用第一種方法(省略了操作數據庫的代碼)操作Mybatis Plus的事務,若出現異常進入catch之後,不會執行數據庫操作的回滾,反而會報No transaction aspect-managed TransactionStatus in scope的錯誤,修改爲第二種可以正常進行事務管理和回滾

看到一個關於此情況的解釋:

@Transactional 必須觸發aop代理才能生效,故非public方法,不執行事務,public方法在本類中被引用,也不執行事務

第一種方法:

​
@PostMapping("/save1")
public boolean action01() {
    return action00(); 
}

@PostMapping("/save2")
public boolean action02() {
    return action00(); 
}

@Transactional
private boolean action00() {
    String result = true;
    try {
        System.out.println(1/0);
    } catch (Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        result = false;
    }
    return result;
}

​

第二種方法:

@PostMapping("/save1")
@Transactional
public boolean action01() {
    boolean result = action00();
    if (!result){
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
    return result; 
}

@PostMapping("/save2")
@Transactional
public boolean action02() {
    boolean result = action00();
    if (!result){
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
    return result; 
}


private boolean action00() {
    String result = true;
    try {
        System.out.println(1/0);
    } catch (Exception e) {
        result = false;
    }
    return result;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章