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

Java 禁止Spring在BeanInstantiationException(Tomcat)之后启动,java,spring,tomcat,Java,Spring,Tomcat,对于我目前正在工作的项目,当spring无法初始化某些Bean(这些Bean在初始化期间调用webservices,因此很可能会崩溃)时,需要禁用webapp上下文以启动它 但是,当bean在初始化过程中抛出任何异常时,它看起来是这样的: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'latestAdsRepository' defined in file [...]

对于我目前正在工作的项目,当spring无法初始化某些Bean(这些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。不用说,这会导致各地出现各种糟糕的空指针异常。特别是因为这个bean对webapp非常重要

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


有什么想法吗

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


您可以使用
@Required
注释将某个注入点标记为必填项。

如何加载Spring上下文


听起来您可能是手动执行的(即,您正在某处调用
newapplicationcontext()
),而应该使用,以便在应用程序启动时(以及在应用程序关闭时关闭)自动加载上下文。Spring上下文启动期间的异常将导致web应用程序上下文启动失败。

感谢您的回答,但是使用@Required注释根本没有帮助。我注意到的是:当上下文启动时(在无法创建所有bean之后),每次都会尝试重新创建丢失的bean,它们被使用。这是一种新的违约行为吗?我没有在配置中启用任何类似的功能。它们属于默认(单例)范围。也许您可以给applicationContext.xml..因为我几乎可以肯定默认行为是不初始化上下文。另外,请提供更多tomcat日志,主要是严重部分。请参阅我的回答: