弹簧上下文无法加载时停止服务器的已知方法?
有时在开发期间,某些东西会被破坏,导致spring上下文无法加载。 问题是有时错误只是在某些bean中,但是webapp的其余部分是部分加载的,然后你会得到一些奇怪的行为。
有没有一种已知的方法可以让Spring停止服务器进程以防万一发生错误? 比如某些bean注入失败,或者某些PostConstruct中发生了一些NPE。
像web.xml中的stopOnError = true之类的东西。
所以最终我找到的解决方案是:创建一个实现ServletContextListener的类,将其命名为ApplicationLoaderListener。
在web.xml中设置此类:
com.my.package.ApplicationLoaderListener
添加一个私有成员:
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); }