Spring事务传播机制
1.场景
事务的传播行为一般发生在事务嵌套的场景中。例如方法A和方法B都添加了事务,当方法A调用方法B时,方法B执行失败是否会带动事务A回滚。
Spring规定了七大传播机制来解决嵌套事务控制的问题。
2.传播机制
- PROPAGATION_REQUIRED
如果当前没有事务,就创建一个事务,如果已经存在事务,就加入到这个事务。这是Spring默认的传播机制 - PROPAGATION_SUPPORTS
当前存在事务,就加入当前事务,如果当前没有事务,就以非事务的方法执行 - PROPAGATION_MANDATORY
当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常 - PROPAGATION_NOT_SUPPORTED
始终以非事务的方式执行,如果当前存在事务,则挂起当前事务 - PROPAGATION_NEVER
不使用事务,如果当前事务存在,则抛出异常 - PROPAGATION_REQUIRES_NEW
创建一个新事务,如果当前存在事务,就将这个事务挂起。
外部事务与内部事务互相独立,内部事务异常不会导致外部事务回滚,外部事务回滚也不会导致内部事务回滚。 - PROPAGATION_NESTED
如果当前事务存在,则在嵌套的事务中执行,否则开启一个事务。
内部事务回滚不会导致外部事务回滚,但外部事务回滚会导致内部事务回滚。