1. REQUIRED:需要一个,有就行
默认值,如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
2. SUPPORTS:有就要,没有也行
支持当前事务,如果当前没有事务,就以非事务方式执行。
3. MANDATORY:必须要,没有就报错
使用当前的事务,如果当前没有事务,就抛出异常。
4. REQUIRES_NEW:需要新的,旧的先放一边
新建事务,如果当前在事务中,把当前事务挂起。
5. NOT_SUPPORTED:不要,有先放一边
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6. NEVER:不要,有就报错
以非事务方式运行,如果当前存在事务,抛出异常。
7. NESTED:嵌套的
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行 REQUIRED 类似的操作。
这7种事务传播行为可用于处理事务方法之间复杂的相互调用情况。
注:REQUIRED 和 NESTED 是 Spring 事务管理中两个常用的传播行为,它们的区别主要在于嵌套事务的处理方式不同:
1. REQUIRED
- 如果当前没有事务,则创建一个新的事务,并在该事务中运行。
- 如果当前已经存在一个事务,则在该事务中运行。
- 即总是运行在一个事务中,如果之前没有事务,则创建一个新的事务。
2. NESTED
- 如果当前没有事务,则与 REQUIRED 类似,都会开启一个新的事务。
- 如果当前已经存在一个事务,则在嵌套事务内执行。
- 嵌套事务是一个保存点,内部错误可以回滚,而不会对外层事务产生影响。
总结来说:
- REQUIRED 没有真正意义上的嵌套事务,内外事务之间是相互影响的。
- NESTED 通过保存点机制,实现了真正的嵌套事务,内外事务相互隔离。
所以 NESTED 更适用于需要嵌套事务的场景,可以使内外事务之间互不影响。

被折叠的 条评论
为什么被折叠?



