欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot @Transactional事务回滚

程序员文章站 2022-05-31 15:36:15
...

@Transactional 常用属性

① readOnly 用于设置当前事务是否为只读事务,true–只读,false–可读写,默认值为false。例如:@Transactional(readOnly=true)
② rollbackFor 用于设置需要进行回滚的异常类数组,当抛出指定异常数组中的异常时,则进行事务回滚。例如:@Transactional(rollbackFor={Exception.class, RuntimeException.class,…})
③ rollbackForClassName 用于设置需要进行回滚的异常类名称数组,当抛出指定异常名称数组中的异常时,则进行事务回滚。例如:@Transactional(rollbackForClassName={“ClassA”,”ClassB”,…})
④ noRollbackFor 用于设置不需要进行回滚的异常类数组,当抛出指定异常数组中的异常时,不进行事务回滚。例如:@Transactional(noRollbackFor={ClassA.class, ClassB.class,…})
⑤ noRollbackForClassName 用于设置不需要进行回滚的异常类名称数组,当抛出指定异常名称数组中的异常时,不进行事务回滚。例如:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”,…})
⑥ propagation 用于设置事务的传播行为。
⑦ timeout 用于设置事务的超时秒数,默认值为-1表示永不超时

@Transactional 使用

①抛出运行异常回滚(当执行回滚无返回值)

try{
    ... 
}catch(Exception e){
    logger.error("error is {}",e);
    throw new RuntimeException();
}

②手动设置回滚(可返回值)

try{
    ...
}catch(Exception e){
 logger.error("error is {}",e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return result;

③超时回滚

@Transactional(timeout = 2)
public Result add(Area area){
    Result result=new Rueslt();
    try {
        Thread.sleep(5000);
        int num = areaMapper.add(area);
        if (num < 1) {
            result.setCode("添加失败!");
            return result;
        }
        result.setResult(true);
        result.setCode("添加成功!");
        return result;
    } catch (Exception e) {
        logger.error("error is {}", e);
    }
    result.setCode("添加失败!");
    return result;
}
相关标签: 数据回滚 java