前言:事务属性的种类: 传播行为、隔离级别、只读、事务超时。
记录一下spring事物的传播行为
传播行为定义了被调用方法的事务边界。
传播行为 | 解析 |
PROPAGATION_REQUIRED(传播需要) | 支持当前事务,如果当前没有事务,就新建一个事务。这是默认的的选择。 |
PROPAGATION_SUPPORTS(传播支持) | 支持当前事务,如果当前没有事务,就以非事务方式执行 |
PROPAGATION_MANDATORY(传播必须) | 支持当前事务,如果当前没有事务,就抛出异常 |
PROPAGATION_REQUIRES_NEW(传播需要新的) | 新建事务,如果当前存在事务,把当前事务挂起 |
PROPAGATION_NOT_SUPPORTED(传播不支持) | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起 |
PROPAGATION_NEVER(传播从不) | 以非事务方式执行,如果当前存在事务,则抛出异常 |
PROPAGATION_NESTED(传播嵌套) | 如果当前存在事务,则在嵌套事务内执行。否则,它看起来和 PROPAGATION_REQUIRED 看起来没什么俩样 |
这里引用一下网友(@未来的大豆)的形象解释
PROPAGATION_SUPPORTS 从翻译上看--仅仅支持事务,没有就没有呗
PROPAGATION_REQUIRED 支持事务,如果有,就用着,没有的话就自己弄一个
PROPAGATION_REQUIRES_NEW 比较有个性,不管有没有,都自己弄一个(把原来的放在一边)
PROPAGATION_MANDATORY 强制必须要有事务,要是没有,就不开心了(抛出异常)
PROPAGATION_NOT_SUPPORTED 不支持事务,有就挂起来
PROPAGATION_NEVER 此处事务与狗不得入内,如果有,就赶出去(抛出异常)