Spring事务传播行为

这篇笔记里面来学习一下Spring的事务的传播行为

首先看下有哪几种传播

事务传播枚举类型

  • REQUIRED表示如果当前有事务,就加入该事务。如果当前没事务,就新起一个事务
  • SUPPORTS表示如果当前有事务,就加入该事务。如果当前没事务,则以非事务运行
  • MANDATORY表示如果当前有事务,就加入该事务。如果当前没事务,则报错
  • REQUIRES_NEW表示如果当前有事务,则当前事务被挂起,并新起一个事务。如果当前没事务,新起一个事务
  • NOT_SUPPORTED表示不管当前是否有事务,则以非事务运行,如果当前有事务则当前事务会被挂起
  • NEVER表示不支持事务。如果当前有事务,则报错
  • NESTED表示如果当前有事务,则会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独提交或回滚。如果当前没事务,则新起一个事务。

同一个类NemoService里面的A和B两个方法,假如说A的事务传播行为是REQUIRED,B的事务传播行为是REQUIRES_NEW,A内部调用了B。当我们在外面使用@Autowire获得了NemoService的bean nemoService,并且调用nemoService.A()的时候,其实B并没有新起一个事务。这是由于Spring AOP的底层原理是动态代理,由于A内部调用了B,所以B是没有被增强过的即@Transactional不起作用。

Show Comments