File tree 1 file changed +6
-1
lines changed
docs/system-design/framework/spring
1 file changed +6
-1
lines changed Original file line number Diff line number Diff line change @@ -419,11 +419,16 @@ Class B {
419
419
420
420
** 3.` TransactionDefinition.PROPAGATION_NESTED ` ** :
421
421
422
- 如果当前存在事务,就在嵌套事务内执行; 如果当前没有事务,就执行与` TransactionDefinition.PROPAGATION_REQUIRED ` 类似的操作。也就是说:
422
+ 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务执行; 如果当前没有事务,就执行与` TransactionDefinition.PROPAGATION_REQUIRED ` 类似的操作。也就是说:
423
423
424
424
- 在外部方法开启事务的情况下,在内部开启一个新的事务,作为嵌套事务存在。
425
425
- 如果外部方法无事务,则单独开启一个事务,与 ` PROPAGATION_REQUIRED ` 类似。
426
426
427
+ ` TransactionDefinition.PROPAGATION_NESTED ` 代表的嵌套事务以父子关系呈现,其核心理念是子事务不会独立提交,依赖于父事务,在父事务中运行;当父事务提交时,子事务也会随着提交,理所当然的,当父事务回滚时,子事务也会回滚;
428
+ > 与` TransactionDefinition.PROPAGATION_REQUIRES_NEW ` 区别于:` PROPAGATION_REQUIRES_NEW ` 是独立事务,不依赖于外部事务,以平级关系呈现,执行完就会立即提交,与外部事务无关;
429
+
430
+ 子事务也有自己的特性,可以独立进行回滚,不会引发父事务的回滚,但是前提是需要处理子事务的异常,避免异常被父事务感知导致外部事务回滚;
431
+
427
432
举个例子:
428
433
- 如果 ` aMethod() ` 回滚的话,作为嵌套事务的` bMethod() ` 会回滚。
429
434
- 如果 ` bMethod() ` 回滚的话,` aMethod() ` 是否回滚,要看` bMethod() ` 的异常是否被处理:
You can’t perform that action at this time.
0 commit comments