mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-25 02:27:10 +08:00
Merge pull request #2610 from JoeyChanMiao/main
[doc perf]优化事务传播行为中TransactionDefinition.PROPAGATION_NESTED的解释说明
This commit is contained in:
commit
0d8b829ce0
@ -419,11 +419,16 @@ Class B {
|
|||||||
|
|
||||||
**3.`TransactionDefinition.PROPAGATION_NESTED`**:
|
**3.`TransactionDefinition.PROPAGATION_NESTED`**:
|
||||||
|
|
||||||
如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就执行与`TransactionDefinition.PROPAGATION_REQUIRED`类似的操作。也就是说:
|
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务执行; 如果当前没有事务,就执行与`TransactionDefinition.PROPAGATION_REQUIRED`类似的操作。也就是说:
|
||||||
|
|
||||||
- 在外部方法开启事务的情况下,在内部开启一个新的事务,作为嵌套事务存在。
|
- 在外部方法开启事务的情况下,在内部开启一个新的事务,作为嵌套事务存在。
|
||||||
- 如果外部方法无事务,则单独开启一个事务,与 `PROPAGATION_REQUIRED` 类似。
|
- 如果外部方法无事务,则单独开启一个事务,与 `PROPAGATION_REQUIRED` 类似。
|
||||||
|
|
||||||
|
`TransactionDefinition.PROPAGATION_NESTED`代表的嵌套事务以父子关系呈现,其核心理念是子事务不会独立提交,依赖于父事务,在父事务中运行;当父事务提交时,子事务也会随着提交,理所当然的,当父事务回滚时,子事务也会回滚;
|
||||||
|
> 与`TransactionDefinition.PROPAGATION_REQUIRES_NEW`区别于:`PROPAGATION_REQUIRES_NEW`是独立事务,不依赖于外部事务,以平级关系呈现,执行完就会立即提交,与外部事务无关;
|
||||||
|
|
||||||
|
子事务也有自己的特性,可以独立进行回滚,不会引发父事务的回滚,但是前提是需要处理子事务的异常,避免异常被父事务感知导致外部事务回滚;
|
||||||
|
|
||||||
举个例子:
|
举个例子:
|
||||||
- 如果 `aMethod()` 回滚的话,作为嵌套事务的`bMethod()`会回滚。
|
- 如果 `aMethod()` 回滚的话,作为嵌套事务的`bMethod()`会回滚。
|
||||||
- 如果 `bMethod()` 回滚的话,`aMethod()`是否回滚,要看`bMethod()`的异常是否被处理:
|
- 如果 `bMethod()` 回滚的话,`aMethod()`是否回滚,要看`bMethod()`的异常是否被处理:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user