[Java2023] Day13.2,3-事务进阶-rollbackFor

82 阅读1分钟
事务进阶
  1. rollbackFor
  2. propagation

一.rollbackFor (发生异常回滚的条件)

默认情况下,只有出现 RuntimeException(运行时异常) 才回滚异常。
rollbackFor属性用于控制出现何种异常类型,回滚事务。
  • 1.服务实现类中
@Transactional(rollbackFor = Exception.class) // 指定出现所有的异常都回滚
@Override
public void delete(Integer id) throws Exception {

    // 1.1删除部门
    deptMapper.deleteById(id);

    // 强制抛出异常进行测试
    // Integer res = 1 / 0;
    if (true) {
        throw new Exception("test");
    }

    // 2.删除员工
    empMapper.deleteByDeptId(id);
}
  • 2.控制器这里要加上throw Exception 因为服务实现类中加了(这个没在课程中说)
@DeleteMapping("/depts/{id}")
public Result delete(@PathVariable Integer id) throws Exception {
    log.info("根据ID删除部门", id);
    deptService.delete(id);
    return Result.success();
}

二.propagation (事务传播,嵌套)

image.png

  • REQUIRED :大部分情况下都是用该传播行为即可。
  • REQUIRES_NEW :当我们不希望事务之间相互影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录成功。

image.png