Skip to content

Commit d2ce644

Browse files
committedFeb 16, 2025·
[doc perf]优化事务传播行为中TransactionDefinition.PROPAGATION_NESTED的解释说明
1 parent d7454e3 commit d2ce644

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed
 

‎docs/system-design/framework/spring/spring-transaction.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -419,11 +419,16 @@ Class B {
419419

420420
**3.`TransactionDefinition.PROPAGATION_NESTED`**:
421421

422-
如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与`TransactionDefinition.PROPAGATION_REQUIRED`类似的操作。也就是说:
422+
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务执行; 如果当前没有事务,就执行与`TransactionDefinition.PROPAGATION_REQUIRED`类似的操作。也就是说:
423423

424424
- 在外部方法开启事务的情况下,在内部开启一个新的事务,作为嵌套事务存在。
425425
- 如果外部方法无事务,则单独开启一个事务,与 `PROPAGATION_REQUIRED` 类似。
426426

427+
`TransactionDefinition.PROPAGATION_NESTED`代表的嵌套事务以父子关系呈现,其核心理念是子事务不会独立提交,依赖于父事务,在父事务中运行;当父事务提交时,子事务也会随着提交,理所当然的,当父事务回滚时,子事务也会回滚;
428+
> `TransactionDefinition.PROPAGATION_REQUIRES_NEW`区别于:`PROPAGATION_REQUIRES_NEW`是独立事务,不依赖于外部事务,以平级关系呈现,执行完就会立即提交,与外部事务无关;
429+
430+
子事务也有自己的特性,可以独立进行回滚,不会引发父事务的回滚,但是前提是需要处理子事务的异常,避免异常被父事务感知导致外部事务回滚;
431+
427432
举个例子:
428433
- 如果 `aMethod()` 回滚的话,作为嵌套事务的`bMethod()`会回滚。
429434
- 如果 `bMethod()` 回滚的话,`aMethod()`是否回滚,要看`bMethod()`的异常是否被处理:

0 commit comments

Comments
 (0)
Please sign in to comment.