Spring事务的七种传播机制

111 阅读1分钟

事务的传播机制

开启事务

  • Spring Boot初始化时自动装配机制已自动开启事务支持
  • 启动类加@EnableTransactionManagement开启事务支持
  • 方法加@Transactional(propagation=Propagation.X)让该方法支持事务
  • X一共有七种枚举值,每种枚举的事务传播机制不一样
  • 事务的原理是动态代理,所以必须要有切面事务才起作用,同类方法之间互相调用事务不起作用。
  • 如果确实需要调用同类方法,可以使用AopContext.currentProxy()获取代理类

事务的传播机制

序号枚举值事务传播机制
1REQUIRED外层/当前没有事务,则新建事务。外层存在事务则加入该事务。一般用于需要保持父子事务一致时的业务。
2SUPPORTS如果当前存在事务,则加入该事务;如果当前不存在事务,则不使用事务。
3MANDATORY强制调用该方法的外层必须开启事务。如果外层存在事务则加入该事务,否则抛异常。
4REQUIRES_NEW无论外层有没有事务,都新建一个事务。
5NO_SUPPORTED即使外层开启了事务,也不使用。
6NEVER从不使用事务,如果外层开启了事务,则抛出异常。
7NESTED事务嵌套,外层存在事务,新开启事务。新开启的事务随主事务回退和提交。但子事务异常父事务可以处理异常后继续提交