REQUIRED(默认的事务传播行为):使用调用方的事务,如果调用方没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的,如果调用方存在事务,则加入当前事务,成为一个整体。(适用于增、删、改、查)
举例:领导没饭吃,我有钱,我会自己买了自己吃;领导有的吃,会分给你一起吃。
SUPPORTS:如果调用方有事务,则使用调用方事务;如果调用方没有事务,则不使用事务。(适用于查询)
举例:领导没饭吃,我也没饭吃;领导有饭吃,我也有饭吃。
MANDATORY:强制调用方必须存在事务,如果不存在,就抛出异常。(不常用)
举例:领导必须管饭吃,没吃饭我就不乐意了,我就抛出异常。
REQUIRES_NEW:如果调用方存在事务,则挂起该事务,我自己创建一个事务。如果当前没有事务,我会自己创建一个。(适用于内部事务和外部事物不关联的情况,比如日志)
举例:领导有饭吃,我偏不要,我自己买饭吃。
NOT_SUPPORTS:如果调用方存在事务,则挂起该事务,不使用事务。(不常用)
举例:领导有饭吃,分我一点,我太忙了不吃。
NEVER:如果调用方存在事务,则抛出异常。(不常用)
举例:领导有饭吃,分我我不吃,我还抛出异常。
NESTED:如果调用方存在事务,则开启子方法事务(嵌套事务),嵌套事务是独立提交或者回滚;
如果调用方没有事务,则同REQUIRED。(不常用)
如果主事务提交,则会携带子事务一起提交。
如果主事务回滚,则子事务也会回滚;如果子事务回滚,则主事务可以回滚也可以不回滚