Spring事务总结

Spring事务总结

事务传播行为

事务传播行为用于表示一个事务里嵌套了另外一个事务时,事务之间的回滚关系。
而常用的有三个事务传播行为:REQUIRED、NESTED和REQUIRES_NEW。
本质来说,事务的回滚和事务的传播,取决于:
1. 是否有抛异常
2. 异常是否有经过spring的aop
3. 当异常经过多个aop时,这些aop事务的关系

传播行为 父方法开启了事务 父方法没开启事务
REQUIRED 父子方法同一事务 子事务各自独立
SUPPORTS 父子方法同一事务 子方法无事务
MANDATORY 父子方法同一事务 报错
NESTED 父子方法父子事务 子事务各自独立
NOT_SUPPORTED 父子方法各自独立 只回滚父事务,不回滚子事务
REQUIRES_NEW 父子方法各自独立 子事务各自独立
NEVER 报错 子事务各自独立

REQUIRED

如果父子方法都开启了事务,那么父方法和子方法是同一个事务。
即无论异常经过的是父方法还是子方法的aop,父子方法都会回滚。
如果只有子方法开启了事务,则子方法的事务各自独立,只回滚自己的。

NESTED

如果父子方法都开启了事务,父方法事务为父事务,子方法事务为子事务。
如果异常经过子事务aop,只回滚子事务。如果异常经过父事务aop,则父子事务都回滚。

REQUIRES_NEW

如果父子方法都开启了事务,父子方法的事务各自独立。

MANDATORY

要求父子方法都要开启事务,那么父方法和子方法是同一个事务,同REQUIRED。
如果只有子方法开启了事务,则报错。

SUPPORTS

如果父子方法都开启了事务,同REQUIRED。如果父方法没有开启事务,则父子方法都没有事务。

NOT_SUPPORTED

如果父子方法都开启了事务,父方法事务为父事务,子方法事务为子事务。
即无论异常经过的是父事务还是子事务的aop,只回滚父事务,不回滚子事务。

NEVER

要求父方法不能开启事务,否则报错。

参考文章:

Spring事务传播行为详解

Spring 事务传播行为 - HANAII BLOG


Spring事务总结
https://cellargalaxy.github.io/posts/框架/19.Spring事务总结/
作者
cellargalaxy
发布于
2020年7月7日
许可协议