【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误
2016-02-29 09:33
459 查看
错误由来
错误原因
错误解决方案
第一种
第二种
进行如上配置后,修改
然后再JBoss中启动项目,如果说启动单个项目的话,是没有问题出现的,但是同时启动两个或者以上的时候,就报出如下的
在网上查了查,发生的原因是:当两个web项目在同一容器中定义了相同的
Web应用根系统属性是否被暴露,使得可以获得日志文件相对于web应用的根目录路径。默认值是”true”,可以设置为”false”来禁止暴露web应用的根系统属性。
【转载请注明出处:令仔很忙(【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为刷新间隔,单位毫秒
log4jConfigLocation为
log4j配置文件路径,也可使用
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或者都没有定义!也就是说:
key为
webapp.root已经指向项目
itoo-exam-calculatescore-web,不能在指向
itoo-exam-scoreanalyze-web;Web应用服务器
JBoss/Tomcat不会为其下不同的web应用使用独立的系统参数;即就是说,应用服务器
JBoss/Tomcat上所有的web应用共用一个系统参数对象(
webAppRootKey,默认值为
“webapp.root”)。运行多个web应用时,你就必须通过
webAppRootKey上下文参数的不同为不同的web应用指定不同的属性名,如此,才不会造成多个web应用指向同一个
webAppRootKey。
webAppRootKey为
web工程的根目录在系统环境变量中的
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错误)】
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- i-jetty环境搭配与编译
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- Linux部署Tomcat服务器
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器