微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Spring Transaction:rollbackfor和norollbackfor都定义了

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

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

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

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

谢谢你的帮助和时间.

解决方法

认情况下,Spring Framework的事务基础结构代码仅在运行时未经检查的异常情况下标记事务以进行回滚;也就是说,抛出的异常是RuntimeException的实例或子类. (错误也将 – 认情况下 – 导致回滚.)从事务方法抛出的已检查异常不会导致事务回滚.

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

原文地址:https://www.jb51.cc/java/121529.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐