Spring-声明式事务(二)——传播属性

前言

众所周知,Spring 的事务属性众多,楼主今天将对 Spring 最常用的事务 —— 声明式事务,进行彻底的解释,包括楼主也写了很多的测试例子。代码地址: 使用 tk-mybatis 的 demo 测试了 Spring 的事务

传播属性

传播属性相对隔离属性,使用的较少,类型也较多。同时有些概念也必将繁杂,难以定义,楼主也是写了很多的测试代码,才得出一些结论。

Spring 事务中有 7 个传播属性:

  1. PROPAGATION_REQUIRED
  2. PROPAGATION_SUPPORTS
  3. PROPAGATION_MANDATORY
  4. PROPAGATION_REQUIRES_NEW
  5. PROPAGATION_NOT_SUPPORTED
  6. PROPAGATION_NEVER
  7. PROPAGATION_NESTED

一张表格搞定:

这张表格是楼主测试了无数遍得来的,大家可以用楼主代码的例子跑跑看。

总之,默认的 Required 足够使用了。所有事务的嵌套都符合定义。

接口与接口之间的事务嵌套使用默认的不会影响业务逻辑。

但注意,由于动态代理的特殊性,如果接口内部的事务方法嵌套,将会导致内层的事务失效,因为它已经不在 Spring 的管理范围之内了。

当然,这张表格可能测的范围还不是百分百的足够,但已经可以理解传播的作用了。如果有兴趣,可以在例子中加入测试代码。