弹簧上下文无法加载时停止服务器的已知方法?

时间:2014-08-17 08:38:09

标签: java spring tomcat

有时在开发期间,某些内容会被破坏,导致spring上下文无法加载。 问题是有时错误只是在一些bean中,但是webapp的其余部分是部分加载的,然后你会得到一些奇怪的行为。

有没有一种已知的方法可以让Spring停止服务器进程以防万一发生错误?就像某些bean注入失败,或者某些PostConstruct中发生了一些NPE。

类似于web.xml中的stopOnError = true。

1 个答案:

答案 0 :(得分:3)

所以最终找到的解决方案是: 创建一个实现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);
}