Spring 事务踩坑记录后续
Spring 事务踩坑记录后续
Spring 事务不生效的情况
除了前文提到的在同一 service 中直接调用事务方法不会自动处理事务以外,还需要注意以下情况。
被代理的方法必须是 public
@Transctional
可以使用在类和方法上,但是需要处理事务的方法必须为 public,否则不会生效。
rollbackFor 属性设置错误
触发事务回滚的异常类型默认是RuntimeException
,如果异常类型无法匹配,那么也不会触发回滚。另外Error
也会引起事务回滚。
propagation 属性设置错误
直接使用下列三种配置不会出现回滚操作
TransactionDefinition.PROPAGATION_SUPPORTS
- 存在事务时才会有回滚操作
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
- 以非事务方式执行,如当前存在事务则挂起事务再执行
TransactionDefinition.PROPAGATION_NEVER
- 以非事务方式执行,如当前存在事务则抛出异常
底层数据库必须支持事务
如果数据库服务本身不支持事务,那么@Transctional
也无能为力。