gpt4 book ai didi

java - Spring 交易 : rollbackfor and norollbackfor both defined

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:10 24 4
gpt4 key购买 nike

这是我在必须维护的应用程序中遇到的问题:

我有一个带有注释的头等舱 @Transactional(rollbackFor = CustomExceptionA.class)然后在下面的代码中我调用了一个方法 @Transactional(noRollbackFor = CustomExceptionB.class)注意:CustomExceptionACustomExceptionB 只有一个共同的祖先,即 Exception

当然,当我执行代码时会引发异常,它既不是 CustomExceptionA 类型也不是 CustomExceptionB 类型,也不是它们的子类。

所以问题很简单:
在这种情况下事务会发生什么情况?它会提交吗?它回滚吗?它是否保持未完成状态等待应用程序做某事(这实际上是一个可能解释此应用程序中看到的一些丑陋事情的答案)?而且:为什么?

最佳答案

Spring Framework 的事务基础结构代码默认只会在运行时、未检查异常的情况下将事务标记为回滚;也就是说,当抛出的异常是 RuntimeException 的实例或子类时。 (默认情况下,错误也会导致回滚。)从事务方法中抛出的已检查异常不会导致事务被回滚。

为什么?这很有道理:检查异常对于处理或抛出是强制性的,因此如果您从事务方法中抛出检查异常,那么框架会假设您知道自己在做什么。如果出现未经检查的异常,则可能是错误或异常处理缺陷,因此回滚事务以避免数据损坏。

关于java - Spring 交易 : rollbackfor and norollbackfor both defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com