有时在开发期间,某些内容会被破坏,导致spring上下文无法加载。 问题是有时错误只是在一些bean中,但是webapp的其余部分是部分加载的,然后你会得到一些奇怪的行为。
有没有一种已知的方法可以让Spring停止服务器进程以防万一发生错误?就像某些bean注入失败,或者某些PostConstruct中发生了一些NPE。
类似于web.xml中的stopOnError = true。
答案 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);
}