WebApproot在spring

我得到这个错误消息

[SEVERE:将上下文初始化事件发送给类org.springframework.web.util.Log4jConfigListener的监听器实例java.lang.IllegalStateException:Web应用程序根系统属性已设置为不同的值:'webapp.root'= [C:\ Users \ jaanlai \ Documents \ NetBeansProjects \ absSovellus \ build \ web]而不是[C:\ Users \ Administrator \ Documents \ NetBeansProjects \ keycard2 \ build \ web] – 为您的web.xml中的“webAppRootKey”上下文参数select唯一的值文件!

这很奇怪,因为我的文件中没有定义任何webAppRootKey。 它是什么?

webAppRootKey是Spring在几个地方使用的上下文参数。 在这种情况下,它被Log4jWebConfigurer 。 它暴露了webapp root作为可以在log4jconfiguration文件中使用的系统属性,如下所示:

 log4j.appender.testfile.File=${webapp.root}/WEB-INF/testlog.log 

如果您出于某种原因想要查找与您的webapp根目录相关的日志,则可以使用它。

你遇到的问题是一些容器(特别是Tomcat)不维护系统属性的每个webapp映射。 如果不指定webAppRootKey ,则Spring将其默认为webapp.root 。 由于您在同一个容器中运行了两个应用程序,因此您尝试启动的第二个应用程序发现webAppRootKey已经设置(通过默认设置),并引发错误。 否则, webAppRootKey将被设置不正确,并且最终可能会从另一个webapp中的一个webapp发出日志。

你可以在web.xml使用上下文参数指定一个不同的webAppRootKey ,如下所示:

 <context-param> <param-name>webAppRootKey</param-name> <param-value>webapp.root.one</param-value> </context-param> 

 log4j.appender.testfile.File=${webapp.root.one}/WEB-INF/testlog.log 

在你的log4j。 这应该照顾到冲突。

 <context-param> <param-name>log4jExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param> 

这解决了我的问题。 信贷: – http://forum.springsource.org/archive/index.php/t-32873.html

看起来您在应用程序服务器中有几个具有默认Log4jConfigListenerconfiguration的webapps。

Log4jConfigurationListener默认行为是将webapp root作为名为webapp.root的系统属性webapp.root ,以允许您在指定日志文件位置时使用它。 但是,如果具有相同名称的系统属性已经存在,则会引发exception。

您可以使用<context-param>命名为webAppRootKey来为该系统属性configuration每个应用程序名称,或者通过将Log4jConfigListener<init-param> log4jExposeWebAppRootfalse来禁止公开系统属性。

也可以看看:

  • Log4jWebConfigurer

以防万一其他人已经完成上述而不是摆脱这个问题:

我们的webapp已经正确设置了webAppRootKey,但是我仍然有上面的例外。 重新启动Glassfish,并重新部署相同的战争文件,工作,去图。

如果使用logback而不是log4j并得到相同的错误,则可以解决这个问题:

 <context-param> <param-name>logbackExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param>