前言
众所周知,Spring 的事务属性众多,楼主今天将对 Spring 最常用的事务 —— 声明式事务,进行彻底的解释,包括楼主也写了很多的测试例子。代码地址: 使用 tk-mybatis 的 demo 测试了 Spring 的事务
传播属性
传播属性相对隔离属性,使用的较少,类型也较多。同时有些概念也必将繁杂,难以定义,楼主也是写了很多的测试代码,才得出一些结论。
Spring 事务中有 7 个传播属性:
- PROPAGATION_REQUIRED
- PROPAGATION_SUPPORTS
- PROPAGATION_MANDATORY
- PROPAGATION_REQUIRES_NEW
- PROPAGATION_NOT_SUPPORTED
- PROPAGATION_NEVER
- PROPAGATION_NESTED
一张表格搞定:
这张表格是楼主测试了无数遍得来的,大家可以用楼主代码的例子跑跑看。
总之,默认的 Required 足够使用了。所有事务的嵌套都符合定义。
接口与接口之间的事务嵌套使用默认的不会影响业务逻辑。
但注意,由于动态代理的特殊性,如果接口内部的事务方法嵌套,将会导致内层的事务失效,因为它已经不在 Spring 的管理范围之内了。
当然,这张表格可能测的范围还不是百分百的足够,但已经可以理解传播的作用了。如果有兴趣,可以在例子中加入测试代码。
网友评论