@Transactional
public class OutterA {
@Autowired
private Inner inner;
public void operationA1() {
this.doSomething();
inner.doSomething();
}
public void operationA2() {
this.doSomething();
try {
inner.doSomething();
} catch (Exception e) {
inner.tryAnother();
}
}
public void doSomething() {
}
}
@Transactional
public class Inner {
public void doSomething() {
throw new RuntimeException();
}
public void tryAnother() {
}
}
在上面的代码中,我希望操作A1会回滚,因为没有捕获异常并导致事务结束,而操作A2会成功,因为在事务结束前捕获并正确处理了异常。但是Spring会把两者都回滚。
// Non-transactional
public class OutterB {
@Autowired
private Inner inner;
public void operationB() {
try {
inner.doSomething();
} catch (Exception ignore) {
}
}
}
在上面的代码中,我希望operationB总是回滚,因为事务是由inner
启动的,异常是跨事务边界抛出的。
我认为您可以使用@transactionl
注释选项,例如:
rollbackfor,rollbackforClassName
norollbackfor,norollbackforclassname
在代码段中,如果将@transactional(noRollbackFor=runtimeexception.class)
放在innerclass
上,事务将不会回滚。但是,将@transactional
注释放在类级别上会影响该类中的每个公共方法,因此我建议您将此注释单独放在每个方法上,并使用这些选项定义特定的行为。
我的RMI服务器接口声明了一个方法foo(),该方法被声明为引发RemoteException和Exception,如下所示: 服务器实现为: 我的客户端在服务器上调用foo: 现在,当我运行客户端时,我得到: 从java类型的foo()中获取异常。rmi。异常异常:未声明的检查异常;嵌套的例外是:java。伊奥。InterruptedIOException:操作超时 Java文档是这样说的。rm
问题内容: 关于程序流,这一直困扰着我一段时间。 我想知道是否有可能从Method中捕获错误,以阻止它执行通常无法跟着它执行的Method,就像下面我无法工作的示例所示。 我通常会有一个静态int变量,该变量会在程序运行时初始化为0,然后,如果某个方法捕获到异常,它将使int递增,并且每个方法仅在int为0时才运行。 这行得通,但我只是想知道是否可以用异常处理替换int shindig。 问题答案
问题内容: 关于程序流,这一直困扰着我一段时间。 我想知道是否有可能从Method中捕获错误,以阻止它执行通常无法跟着它执行的Method,就像下面我无法工作的示例所示。 我通常会有一个静态int变量,该变量会在程序运行时初始化为0,然后,如果某个方法捕获到异常,它将使int递增,并且每个方法仅在int为0时才运行。 这行得通,但我只是想知道是否可以用异常处理替换int shindig。 问题答案
问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们
我对Java线程、Runnable等相当陌生。因此,我想知道为什么下面的代码没有捕获异常? 阅读有没有一种方法可以使Runnable的run()引发异常,我收集到: "...如果您的run()方法确实是Thread的目标,则抛出异常是没有意义的,因为它是不可观察的;抛出异常与不抛出异常(无)具有相同的效果。"(@erickson) 我应该检查Runnable.run()方法中的异常。 为什么会这样
为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?