事务进阶
- rollbackFor
- propagation
一.rollbackFor (发生异常回滚的条件)
默认情况下,只有出现 RuntimeException(运行时异常) 才回滚异常。
rollbackFor属性用于控制出现何种异常类型,回滚事务。
@Transactional(rollbackFor = Exception.class)
@Override
public void delete(Integer id) throws Exception {
deptMapper.deleteById(id);
if (true) {
throw new Exception("test");
}
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 (事务传播,嵌套)

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