like_life 发表于 2020-11-24 13:32

多层嵌套事务带来的问题

```
Transaction rolled back because it has been marked as rollback-only
```

多层嵌套事务中, 如果使用的是默认的事务传播方式, 那么在内层事务抛出异常的时候, 外层事务捕捉并正常执行完毕, 就会报出rollback-only异常

问题在于spring所使用的默认事务传播级别是PROPAGATION_REQUIRED, 然后在方法中出现了事务嵌套,
但是内层的事务出错了, 在内层事务结束时, spring会把事务标记为rollback-only, 如果外层事务也捕获了异常,
那么就会把代码执行完, 然后在提交事务时发现事务已经被标记为rollback-only, 但是方法却正常执行了, 这个时候就会抛出对应异常

wsat 发表于 2020-11-24 14:05

注解类事务是基于AOP代{过}{滤}理的 当在同一个类定义了2个事务,互相调用 第二个事务会不执行 还是使用第一个事务

火凤燎原 发表于 2020-11-24 14:08

是的。只要在第一个server上加@Transactional就够了

xiadongming 发表于 2020-11-24 18:04

You123456 发表于 2020-11-25 09:34

前两天面试还被问了类似的问题,蒙蔽
页: [1]
查看完整版本: 多层嵌套事务带来的问题