上下文初始化失败:org.springframework.beans.factory.BeanDefinitionStoreException

Posted

技术标签:

【中文标题】上下文初始化失败:org.springframework.beans.factory.BeanDefinitionStoreException【英文标题】:Context initialization failed: org.springframework.beans.factory.BeanDefinitionStoreException 【发布时间】:2011-11-23 02:40:00 【问题描述】:

我有一个基于 J2EE 的 Web 应用程序,它完美地部署在 JBoss 6.0 应用服务器上。 我正在使用 JBoss 的“默认”服务器配置。 我的“.ear”文件包含 EJB 和一个“.war”文件 - 我使用 Spring Security 3x 进行用户身份验证和授权。

当我在 JBoss 6.1 上部署相同的 ear 文件时,我发现我的 WAR 部署失败并出现以下错误。令人惊讶的是:如果我以分解格式部署相同的“.ear”文件,则部署成功。

22:31:14,827 INFO  [StdSchedulerFactory] Quartz scheduler version: 1.8.3
22:31:14,828 INFO  [QuartzScheduler] Scheduler EdmQuartzScheduler_$_NON_CLUSTERED started.
22:31:14,828 INFO  [QuartzService] QuartzService(EdmQuartzMBean) started.
22:31:14,837 INFO  [TomcatDeployment] deploy, ctxPath=/edm
22:31:14,896 INFO  [[/edm]] Initializing Spring root WebApplicationContext
22:31:14,897 INFO  [ContextLoader] Root WebApplicationContext: initialization started
22:31:14,907 INFO  [XmlWebApplicationContext] Refreshing Root WebApplicationContext: startup date [Wed Sep 21 22:31:14 PDT 2011]; rootof context hierarchy
22:31:14,910 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-business.xml]
22:31:14,911 ERROR [ContextLoader] Context initialization failed: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext-business.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext-business.xml]
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) [:3.0.5.RELEASE]
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) [:3.0.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) [:3.0.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) [:3.0.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) [:3.0.5.RELEASE]
        at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) [:3.0.5.RELEASE]
        at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) [:3.0.5.RELEASE]
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) [:3.0.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467) [:3.0.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397) [:3.0.5.RELEASE]
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) [:3.0.5.RELEASE]
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) [:3.0.5.RELEASE]
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) [:3.0.5.RELEASE]
        at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3369) [:6.1.0.Final]
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3828) [:6.1.0.Final]
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:294) [:6.1.0.Final]
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:146) [:6.1.0.Final]
        at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:476) [:6.1.0.Final]
        at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118) [:6.1.0.Final]
        at org.jboss.web.deployers.WebModule.start(WebModule.java:95) [:6.1.0.Final]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_27]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_27]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_27]
        at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_27]
        at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) [:6.0.0.GA]
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) [:6.0.0.GA]
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) [:6.0.0.GA]
        at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:271) [:6.0.0.GA]
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:670) [:6.0.0.GA]
        at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) [:2.2.0.SP2]
        at $Proxy41.start(Unknown Source)       at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:53) [:2.2.0.SP2]
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:41) [:2.2.0.SP2]
        at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.2.0.SP2]
        at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.2.0.SP2]
        at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.2.0.SP2]
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
        at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:301) [:2.2.0.SP2]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
        .
        .
        .
        .

在我的 WAR 的 web.xml 中,我将 Spring 配置文件的位置指定为:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
         /WEB-INF/applicationContext-business.xml
         /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

我已验证 XML 文件没有任何语法问题,并且这些文件确实打包在 WAR 的 WEB-INF 目录下。 现在我相信 JBoss 使用 Tomcat 来解压 WAR 文件。因此,当 WAR 文件加载和/或未解包时,似乎无法在类路径中找到这些文件。

我不知道它是如何在 JBoss 6.0 中成功运行但在 6.1 中失败的。 6.1 中有更多错误修复,但内部结构或库在这 2 个版本之间没有更改。

当“ear”以归档/折叠格式部署时,任何人都可以建议为什么 Spring 找不到这些配置文件? 我是否需要将此类配置文件打包在 WEB-INF/classes 下,还是应该在标签中使用任何前缀,例如“classpath:”?

非常感谢。

【问题讨论】:

【参考方案1】:

我知道我们可以通过在类路径中添加文件并将 web.xml 更改为来解决这个问题

 <context-param>
  <param-name>contextConfigLocation</param-name>
   <param-value>
     classpath:/resource/applicationContext-business.xml
   </param-value>
 </context-param>

【讨论】:

以上是关于上下文初始化失败:org.springframework.beans.factory.BeanDefinitionStoreException的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloudAlibaba项目报错java.lang.IllegalArgumentException: Could not find class [org.springframew解决方案

初始化默认 SSL 上下文失败

上下文初始化失败 Spring

ContextLoader:上下文初始化失败

Tomcat - 上下文初始化失败

上下文初始化失败:org.springframework.beans.factory.BeanDefinitionStoreException