Spring 事务踩坑记录后续

Spring 事务踩坑记录后续

Spring 事务不生效的情况

除了前文提到的在同一 service 中直接调用事务方法不会自动处理事务以外,还需要注意以下情况。

被代理的方法必须是 public

@Transctional 可以使用在类和方法上,但是需要处理事务的方法必须为 public,否则不会生效。

rollbackFor 属性设置错误

触发事务回滚的异常类型默认是RuntimeException,如果异常类型无法匹配,那么也不会触发回滚。另外Error也会引起事务回滚。

propagation 属性设置错误

直接使用下列三种配置不会出现回滚操作

  • TransactionDefinition.PROPAGATION_SUPPORTS
    • 存在事务时才会有回滚操作
  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED
    • 以非事务方式执行,如当前存在事务则挂起事务再执行
  • TransactionDefinition.PROPAGATION_NEVER
    • 以非事务方式执行,如当前存在事务则抛出异常

底层数据库必须支持事务

如果数据库服务本身不支持事务,那么@Transctional也无能为力。