一尘不染

当Spring上下文无法加载时,停止服务器的已知方法是什么?

tomcat

有时在开发过程中,某些东西会损坏,从而导致spring上下文无法加载。问题在于,有时错误仅出现在某些Bean中,但是Webapp的其余部分已部分加载,然后您会得到一些奇怪的行为。

有什么已知的方法可以使Spring在发生问题时停止服务器进程?例如某些bean注入失败,或者某些NPE发生在某些PostConstruct之类的东西中。

web.xml中的stopOnError = true之类的东西。


阅读 238

收藏
2020-06-16

共1个答案

一尘不染

因此,最终我找到的解决方案是:创建一个实现ServletContextListener的类,将其称为ApplicationLoaderListener。

在web.xml中设置此类:

<listener>
    <listener-class>com.my.package.ApplicationLoaderListener</listener-class>
</listener>

向其中添加一个私人成员:

private final ServletContextListener loader = new ContextLoaderListener();

此类必须实现两种接口方法,其中的一种是contextInizialized:

@Override
public void contextInitialized(ServletContextEvent sce) {
    try {
        loader.contextInitialized(sce);
    } catch (BeanCreationException e) {
        handle(e);
    }
}

和handle()的实现:

private void handle(BeanCreationException e) {
    log.error("=============== FATAL =============== - failed to create bean: ", e);
    System.exit(1);
}

为了使代码完整,第二种方法是:

@Override
public void contextDestroyed(ServletContextEvent sce) {
    loader.contextDestroyed(sce);
}
2020-06-16