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