2016-07-24 71 views
1

我有一个Spring Web应用程序。当应用程序上下文开始时,我使用ApplicationListener<ContextRefreshedEvent>来执行一些应用程序初始化,特别是我从Web服务加载数据。如果这个Web服务无法访问,那么我的应用程序就无法做任何有用的事情,并且保持它的运行是没有意义的。有没有办法以编程方式关闭应用程序上下文?Spring Web应用程序:初始化失败时关机

我试图做到以下几点:

if (contextRefreshedEvent instanceof ConfigurableApplicationContext) 
{ 
    ConfigurableApplicationContext configurableApplicationContext 
      = (ConfigurableApplicationContext) contextRefreshedEvent; 
    configurableApplicationContext.close(); 
} 

但而不是正常关闭,产生了以下异常:

java.lang.IllegalStateException:Bean工厂未初始化或已关闭 - 称之为“刷新'在通过ApplicationContext访问bean之前

那么在这种情况下关闭应用程序的正确方法是什么?

+0

你可以设置一些预定的操作来检查服务是否启动,并等待它。但在启动时关闭异常应用程序是可以的。或者,你可以只是捕获异常并运行system.exit(0)并记录日志原因,如果它列在某些异常列表中或异常排除异常中 – Sarief

+0

调用'System.exit'是一个非常糟糕的主意,就好像yu不幸也可能杀死你的服务器,这几乎不是你想要的。只需抛出一个基本上阻止应用程序启动的异常。 –

+0

我知道使用'System.exit'的选项,但是我同意@ M.Deinum说这不是一个好主意。有没有干净的方法来避免抛出异常? – lanoxx

回答

0

抛出一个ApplicationContextException。它适用于Spring 4.2.7.RELEASE