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;
}

你可能感兴趣的:(Spring Boot + Mybatis Plus中事务笔记)