Spring七种事务传播特性:
REQUIRED
如果不存在外层事务就主动开启事务,否则使用外层事务。
SUPPORTS
如果不存在外层事务就不开启事务,否则使用外层事务。
MANDATORY
如果不存在外层事务就抛出异常,否则使用外层事务。
REQUIRES_NEW
总是主动开启事务,如果存在外层事务,就将外层事务挂起。
NOT_SUPPORTED
总是不开启事务,如果存在外层事务,就将外层事务挂起。
NEVER
总是不开启事务,如果存在外层事务,就抛出异常。
NESTED
如果不存在外层事务就创建事务,否则创建嵌套的子事务。
使用场景
不重要的项目/普通场景/懒得考虑那么多:REQUIRED
内层方法与外层方法几乎没有关联,相当于独立执行:REQUIRES_NEW
内层方法依赖于外层方法,但是外层方法不希望被内层方法影响:NESTED
内层方法需要和外层方法的操作同步,发生异常时要么都不回滚,要么一起回滚:SUPPORTS
内层方法不启用事务,但是可以允许外层方法启用事务:NOT_SUPPORTED
内层方法不启用事务,也不允许外层方法启用事务:NEVER
内层方法需要使用外层方法的事务,不希望自己开启一个新事务:MANDATORY