ben*_*ico 6 java spring transactions
这是我必须维护的应用程序中遇到的问题:
我有一个带注释的第一个类@Transactional(rollbackFor = CustomExceptionA.class)
然后在下面的代码中我调用了一个@Transactional(noRollbackFor = CustomExceptionB.class)
NB 的方法:CustomExceptionA或者CustomExceptionB只有一个共同的祖先Exception.
,当然,当我执行的代码抛出一个异常至极的类型是既不CustomExceptionA或者CustomExceptionB也不是他们的子类.
所以问题很简单: 在这种情况下交易会发生什么?它承诺了吗?它会回滚吗?它是否保持未完成状态等待应用程序执行某些操作(这实际上是一个可以解释此应用程序中看到的一些丑陋内容的答案)?而且:为什么?
谢谢你的帮助和时间.
Jk1*_*Jk1 10
默认情况下,Spring Framework的事务基础结构代码仅在运行时未经检查的异常情况下标记事务以进行回滚; 也就是说,抛出的异常是RuntimeException的实例或子类.(错误也将 - 默认情况下 - 导致回滚.)从事务方法抛出的已检查异常不会导致事务回滚.
为什么?这非常有意义:已检查的异常对于处理或丢弃是强制性的,因此如果您将已检查的异常从事务方法中抛出,那么框架会假设您知道自己在做什么.如果未解决的异常可能是错误或异常处理缺陷,则回滚事务以避免数据损坏.
| 归档时间: |
|
| 查看次数: |
6754 次 |
| 最近记录: |