在BeanInstantiationException(Tomcat)之后禁止Spring启动

时间:2010-09-03 10:29:08

标签: java spring tomcat

对于我目前正在工作的项目,当spring无法初始化某些bean(在初始化期间调用webservices并因此可能崩溃)时,需要禁用webapp上下文。

但是,当bean在初始化期间抛出任何异常时,它看起来像这样:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'latestAdsRepository' defined in file [...]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [...]: Constructor threw exception; nested exception is java.io.IOException: SHUT DOWN NOW!!
...
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [...]: Constructor threw exception; nested exception is java.io.IOException: SHUT DOWN NOW!!

然而,上下文开始,并且对无法启动的bean的所有引用都是 null 。不用说,这会导致各种各样糟糕的Nullpointer Exceptions。特别是因为这个bean对于webapp非常重要。

所以我需要一种方法来明确地告诉Spring,如果无法初始化bean,这个webapp就无法启动。但是,System.exit(1)不是一个选项,因为此Tomcat服务器上还有其他Web应用程序。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

据我所知,默认情况下,当Spring无法实例化bean时,如果异常通过启动侦听器传播到servlet容器,则上下文启动失败。

您可以使用@Required注释将某个注射点标记为必需。

答案 1 :(得分:0)

你是如何加载Spring上下文的?

听起来你可能是手动操作(即你在某处调用new ApplicationContext()),而应该使用ContextLoaderListener,以便在应用程序启动时自动加载上下文(并在应用程序关闭期间关闭) )。 Spring上下文启动期间的异常将传播到Web应用程序上下文启动失败。