gpt4 book ai didi

java - 如果远程调用传播错误,如何让 Spring 致命退出

转载 作者:行者123 更新时间:2023-11-30 05:10:27 27 4
gpt4 key购买 nike

我有一个通过 Spring 的 RMI 代理 机制公开服务的应用程序。存在一个问题,有时存储 JAR 的文件服务器上的“blip”会导致调用将 NoClassDefFoundError 传播回调用者。

到目前为止,还算公平。问题是,如果发生这种情况,我希望我的应用程序崩溃 - 即如果错误将被传播回调用者。

请注意,我的应用程序中已经有一个 UncaughtExceptionHandler,但它并未被调用(因为该异常并未真正未捕获)

最佳答案

如果您通过RmiServiceExporter(或RemoteExporter的任何其他子类)公开RMI服务,那么您可以inject arbitrary interceptors进入调用堆栈,每当调用 RMI 服务时都会调用该调用堆栈。

这些拦截器可以捕获任何抛出的 NoClassDefFoundError,并调用 System.exit()

例如:

public class ExitInterceptor implements MethodInterceptor {

@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
try {
return methodInvocation.proceed();
} catch (NoClassDefFoundError noClassDefFoundError) {
noClassDefFoundError.printStackTrace();
System.exit(1);
return null;
}
}

}

<bean id="exporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- existing properties -->
<property name="interceptors">
<bean class="com.x.ExitInterceptor"/>
<property>
</bean>

关于java - 如果远程调用传播错误,如何让 Spring 致命退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584060/

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