【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误

  • 错误由来
  • 错误原因
  • 错误解决方案
    • 第一种
    • 第二种

错误由来



    说一说事情的缘由,最近项目中加了日志,在项目中加了spring监听器:

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/config/log4j.xml</param-value>
    </context-param>
    <!--启动一个watchdog线程每1800秒扫描一下log4j配置文件的变化 -->
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>1800000</param-value>
    </context-param>
    <!--spring log4j监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

log4jRefreshInterval 为刷新间隔,单位毫秒

log4jConfigLocationlog4j配置文件路径,也可使用classpath:xxx的形式

    进行如上配置后,修改log4j.xml后,在刷新间隔时间后,配置的监听器Log4jConfigListener会重新加载log4j相关配置。

    然后再JBoss中启动项目,如果说启动单个项目的话,是没有问题出现的,但是同时启动两个或者以上的时候,就报出如下的ERROR

20:54:07,883 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/itoo-exam-scoreanalyze-web]] (ServerService Thread Pool -- 55) JBWEB000287: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener: java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [F:\Program Files\jboss-eap-6.2-itoo4.0\standalone\deployments\itoo-exam-calculatescore-ear.ear\itoo-exam-calculatescore-web.war\] instead of [F:\Program Files\jboss-eap-6.2-itoo4.0\standalone\deployments\itoo-exam-scoreanalyze-ear.ear\itoo-exam-scoreanalyze-web.war\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
    at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:150) [spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE]
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117) [spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE]
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46) [spring-web-4.0.9.RELEASE.jar:4.0.9.RELEASE]
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_60]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_60]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)

错误原因



    在上面的异常中明显的提示:

Web app root system property already set to different value: 'webapp.root' = [F:\Program Files\jboss-eap-6.2-itoo4.0\standalone\deployments\itoo-exam-calculatescore-ear.ear\itoo-exam-calculatescore-web.war\] instead of [F:\Program Files\jboss-eap-6.2-itoo4.0\standalone\deployments\itoo-exam-scoreanalyze-ear.ear\itoo-exam-scoreanalyze-web.war\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

    在网上查了查,发生的原因是:当两个web项目在同一容器中定义了相同的webAppRootKey或者都没有定义!也就是说:keywebapp.root已经指向项目itoo-exam-calculatescore-web,不能在指向itoo-exam-scoreanalyze-web;Web应用服务器JBoss/Tomcat不会为其下不同的web应用使用独立的系统参数;即就是说,应用服务器JBoss/Tomcat上所有的web应用共用一个系统参数对象(webAppRootKey,默认值为“webapp.root”)。运行多个web应用时,你就必须通过 webAppRootKey 上下文参数的不同为不同的web应用指定不同的属性名,如此,才不会造成多个web应用指向同一个webAppRootKey

webAppRootKeyweb工程的根目录在系统环境变量中的key

错误解决方案



    有两种解决方案:

第一种

    修改web.xml文档,指定工程自己的webAppRootKey

<!-- 项目app1的web.xml配置 -->
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>app1.root</param-value>  <!-- 更改"webapp.root"为自定义的任意字符串 -->
</context-param>  

------------------- 华丽的分割线 --------------------

<!-- 项目app2的web.xml配置 -->
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>app2.root</param-value>  <!-- 更改"webapp.root"为自定义的任意字符串 -->
</context-param>  

第二种

     修改web.xml文档

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

log4jExposeWebAppRoot 为是否设置环境变量,可选 true/false

Web应用根系统属性是否被暴露,使得可以获得日志文件相对于web应用的根目录路径。默认值是”true”,可以设置为”false”来禁止暴露web应用的根系统属性。

【转载请注明出处:令仔很忙(【JAVA调错】—-JBoss发布多个项目时抛出webAppRootKey错误)】

时间: 2024-08-03 11:12:50

【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误的相关文章

var-wa发布到新浪sae访问出的错误

问题描述 wa发布到新浪sae访问出的错误 HTTP ERROR 500 Problem accessing /wxMpServlet. Reason: INSTANCE Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52) at org.apache.h

java-maven 哪个大神帮看看在用mvn导项目时出现的这个错误是怎么回事

问题描述 maven 哪个大神帮看看在用mvn导项目时出现的这个错误是怎么回事 Failed to parse plugin descriptor for org.apache.maven.plugins:maven-enforcer-plugin:1.0-beta-1 (C:Usersliangyab.m2repositoryorgapachemavenpluginsmaven-enforcer-plugin1.0-beta-1maven-enforcer-plugin-1.0-beta-1.

AES加密时抛出java.security.InvalidKeyException:&amp;#160;Illegal&amp;#160;key&amp;#160;size&amp;#160;or&amp;#160;def

原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def  使用AES加密时,当密钥大于128时,代码会抛出 java.security.InvalidKeyException: Illegal key size or default parameters Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件.文件位于$

无论是eclipse还是myeclipse运行android项目时都出现下列错误

问题描述 无论是eclipse还是myeclipse运行android项目时都出现下列错误 我的JDK无论1.7还是1.8还是没用 解决方案 从eclipse中导入myeclipse项目运行是出现"不能部署到服务器"的错误.用eclipse运行和部署myeclipse项目用eclipse运行和部署myeclipse项目 解决方案二: unsupported major minor version 52.0 解决方案三: http://stackoverflow.com/question

vs2013 iis express运行项目的时候,伪静态页面抛出404错误?

问题描述 vs2013iisexpress运行项目的时候,伪静态页面抛出404错误,但是vs2010以下的版本可以!如图:请问各位大侠,怎么实现vs2013iisexpress伪静态,谢谢! 解决方案 解决方案二:你这个是还没有到程序里面吧,像是iis找不到你的web资源.解决方案三:不是,不知道咱回事,VS2010以下的版本没有问题,到vs2013后可能是因为使用了iisexpress代理服务器出了问题!解决方案四:各位大侠,如果能给个正确的提示,直接200分给,说话算数.是不是不能用伪静态,

菜鸟调错(一)Maven项目部署到Jboss出现的错误

Maven项目部署到Jboss出现:Failed to create a new SAX parser 今天调试的时候遇到一个错误,往Jboss的deploy目录扔war包的时候,报了一个"Failed to create a new SAX parser"的错误.在网上找了找解决方案,一般都说将项目中的xerces-2.6.2.jar和xml-apis.jar包删掉即可,但是我试了试删了还是不行,因为在打包的时候Maven还是会将它们打进你的war包. 首先,我的项目中用到了dwr,

Hibernate3连接oracle11g在启动项目时总是抛出如下异常

问题描述 我的hibernate.cfg.xml的配置文件如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-confi

tomcat部署项目时出错!求大神帮忙看看!

问题描述 新人到公司,搭建环境,准备用tomcat部署项目时出错.如下错误!求解决!万分感谢!! 解决方案 解决方案二:工程是动态web工程吗?把工程目录列表贴出来看看解决方案三:如图解决方案四:clean下工程,重新部署试试解决方案五:看看你项目名称左上角的!看看缺哪些jar包,先倒入进去还有你的这个工程,看着像是一个java工程,感觉不像是web工程啊是否是!遮挡住了标识web工程的小球呢解决方案六:这是java的工程...重新部署为DynamicWebProject试试吧解决方案七:1.你

如何更合理的利用Java中的异常抛出

以前,我觉得编程语言中最让人不解的部分就是它能够创建错误.当时我对Java语言中的throw关键字的第一反应就是"啊,这也太傻了,为什么我们想要引发一个错误(error)?"我觉得错误是我的敌人,应当避免的,所以创建错误是毫无用处甚至是危险的.我认为在JavaScript中加入这样的关键字是多此一举.但随着我编程经验的丰富,我逐渐变成了throw我的error粉丝.合理的使用它们会让对代码的调试和维护大大简化. 在编程的时候,Error通常出现在不期望的事情发生时.可能是传入函数的参数