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
看起来您在应用程序服务器中有几个具有默认Log4jConfigListener
configuration的webapps。
Log4jConfigurationListener
默认行为是将webapp root作为名为webapp.root
的系统属性webapp.root
,以允许您在指定日志文件位置时使用它。 但是,如果具有相同名称的系统属性已经存在,则会引发exception。
您可以使用<context-param>
命名为webAppRootKey
来为该系统属性configuration每个应用程序名称,或者通过将Log4jConfigListener
的<init-param>
log4jExposeWebAppRoot
为false
来禁止公开系统属性。
也可以看看:
-
Log4jWebConfigurer
以防万一其他人已经完成上述而不是摆脱这个问题:
我们的webapp已经正确设置了webAppRootKey,但是我仍然有上面的例外。 重新启动Glassfish,并重新部署相同的战争文件,工作,去图。
如果使用logback
而不是log4j
并得到相同的错误,则可以解决这个问题:
<context-param> <param-name>logbackExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param>