问题:spring的事务传播行为中,内层为nested是否会被外层的required的异常而影响呢?
回答:
在Spring的事务传播行为中,如果外层事务的传播行为是REQUIRED
,而内层事务的传播行为是NESTED
,那么内层事务的提交和回滚会受到外层事务的影响。
具体来说,如果外层事务发生了异常并回滚,内层事务也会被回滚。这是因为NESTED
传播行为是嵌套事务,它会创建一个保存点(Savepoint)并在需要时回滚到该保存点,但如果外层事务回滚,它会回滚到整个事务的起点,包括内层的嵌套事务。
如果外层事务顺利提交,而内层事务发生异常,则只会回滚内层事务,而外层事务不受影响。
总结:
requires_new: 内层和外层是俩个毫不相关的事务,外层是否回滚,取决于内层抛出后,外层是否捕获异常
nested: 内外层是一个嵌套间的关系,当内层回滚,外层的回滚取决于是否捕获异常。外层回滚则内层也会回滚