【发布时间】:2018-09-17 07:56:49
【问题描述】:
我知道未经检查的异常 (RuntimeExceptions) 通常会导致您的事务出现回滚,但是如果您在同一方法中捕获该异常会发生什么?当errorOccurred 为true 时,我希望回滚整个事务。但我想知道捕获 Exception 是否会吞噬 RuntimeException 从而导致事务不回滚?此代码是否仍然回滚事务?
public static void main(String[] args) {
try {
// boring stuff...
if(errorOccurred)
throw new RuntimeException("RuntimeException is thrown.");
} catch (Exception e) {
System.out.println("RuntimeException cought. Does is still rollback transaction?");
}
}
【问题讨论】:
-
如果你传递给
manual异常处理你应该自己回滚。 -
那为什么要捕获异常呢?
-
@JackFlamp 在这个方法中还有其他一些事情需要处理检查的异常。否则我会摆脱它。
-
那么您应该单独处理这些异常。 RuntimeExceptions 被定义为导致回滚
-
@JackFlamp 我想知道的是,如果在抛出 RuntimeException 后立即开始回滚,还是等到 catch/finally 块首先运行?
标签: java jakarta-ee transactions