Spring 中的事务传播

Transaction Propagation 参考: org.springframework.transaction.TransactionDefinition 的PROPAGATION_ 几个属性 汇总图

支持外层事务

REQUIRED

如果有外部事务: 使用外部的事务控制
如果没有外部事务: 创建一个新事务

默认的方式, 外部有就用, 没有就自己创建

SUPPORTS

如果有外部事务: 使用外部的事务控制
如果没有外部事务: 则不用事务执行

in short 就是随缘, 外部有就用, 没有就不用

MANDATORY

如果有外部事务: 使用外部的事务控制
如果没有外部事务: 抛出异常

in short 必须在事务内部执行, 没有外部事务则抛出异常

不支持外层事务

NOT_SUPPORTED

如果有外部事务: 挂起外部的事务(不抛异常)
如果没有外部事务:以无事务执行

in short 不支持当前事务;总是以非事务的方式执行

REQUIRES_NEW

如果有外部事务: 挂起外部的事务, 创建一个内部新事务
如果没有外部事务: 创建一个新事务

in short 必须使用新的事务

NEVER

如果有外部事务: 抛出异常
如果没有外部事务: 以无事务方式执行

in short 不允许事务执行