传播行为 描述
    PROPAGATION_REQUIRED 如果没有,就开启一个事务;如果有,就加入当前事务。(方法B看到自己已经运行在方法A的事务内部,就不再起新的事务,直接加入方法A)
    RROPAGATION_REQUIRES_NEW 如果没有,就开启一个事务;如果有,就将当前事务挂起。(方法A所在的事务就会挂起,方法B会起一个新的事务,等待方法B的事务完成以后,方法A才继续执行)
    PROPAGATION_NESTED 如果没有就开启一个新的事务;如果有,就在当前事务中嵌套其他事务
    PROPAGATION_SUPPORTS 如果没有,就以非事务方式执行;如果有,就加入当前事务。(方法B看到自己已经运行在方法A的事务内部,就不再起新的事务,直接加入方法A)
    PROPAGATION_NOT_SUPPORTED 如果没有,就以非事务方式执行;如果有,就将当前事务挂起。(方法A所在的事务就会挂起,而方法B以非事务状态运行完,再继续方法A的事务)
    PROPAGATION_NEVER 如果没有,就以非事务方式执行;如果有,就抛出异常。
    PROPAGATION_MANDATORY 如果没有,就抛出异常;如果有,就使用当前事务

    多个事务之间的合并,互斥等都可以通过设置事务的传播特性来解决

    • PROPAGATION_REQUIRED:必被包含事务(增删改必用)
    • RROPAGATION_REQUIRES_NEW: 自己新开事务,不管之前是否有事务(事务A在运行;当新开一个事务B,则将事务A挂起(停止运行),执行事务B里的内容,事务B执行完毕后再执行事务A)
    • PROPAGATION_SUPPORTS: 支持事务,如果加入的方法有事务,则支持事务,如果没有,不单开事务。(方法A里有一个事务A(比如设定的是PROPAGATION_REQUIRED),B事务加入进来以后(B的事务是PROPAGATION_SUPPORTS),那么事务A和事务B合并,都是PROPAGATION_REQUIRED事务的特性)
    • PROPAGATION_NEVER: 不能运行中事务中,如果包在事务中,抛出异常(绝对不能包在事务中,如果敢包,就抛出异常,停止运行)
    • PROPAGATION_NOT_SUPPORTED: 不支持事务,运行在非事务环境(A是有事务,A事务在运行,等调到B的时候(B不支持事务),A事务挂起,B在非事务的环境中运行,运行结束再把A事务继续执行)

    不常用

    • PROPAGATION_MANDATORY: 必须包在事务中,没有事务则抛出异常
    • PROPAGATION_NESTED: 嵌套事务