tomcat启动之后,一个项目由两个线程启动的问题
2017-09-07 11:21
591 查看
期初在使用eclipse开发项目的时候,偶然的一次发现,我们的配置配件加载了两遍,当时不影响正常使用,也就没在意。
后期发现同事们都只加载一遍配置文件,这时候我就意识到问题了,当时是由于我在eclipse配置tomcat启动目录在webapps目录下,但是同事们都在eclipse默认的wtswebapps目录下,所以当时我就将目录进行迁移,之后发现配置文件只加载一次了。
就在前几天,生产上出现了一起重复请求的运维问题,我就想到了这个事情了。
经过研究发现问题出现在tomcat下面的conf目录里面的service.xml配置文件里面的Host节点。
纯净的Host节点配置如下:
仅有一个日志的配置。
然后我查看之前eclipse启动项目的tomcat的Host节点发现
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/webapps/ssacWechat_uat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
</Host>
多了一个Context的标签,里面配置项目的路径,与项目对于的rootpath,而修改过tomcat路径的项目host配置为:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/wtswebapps/ssacWechat_uat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
</Host>
看出来问题了吗?
就是说如果Context标签下面的项目,tomcat还会重新加载一遍。
对于service.xml里面Host标签的意思就是,tomcat会优先加载webapps目录下面的项目,当加载完成之后会选择Host节点里面的Context节点对应的项目,这样如果Context节点里面的项目位置恰好在该tomcat下的webapps目录里面的话就会造成同一个项目加载了两遍。(docBase属性代表项目的路径,这里可以使用相对路径或者是绝对路径[相遇对webapps目录而言]path代表web访问的rootPath)
比如说我将Host配置成如下配置:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<!--
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/webapps/ssacWechat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
-->
<Context path="/" docBase="ssacWechat" debug="0" reloadable="true"/>
</Host>
使用start.bat启动tomcat的时候会发现,项目同样是加载了两遍,但是我访问localhost:8080/ssacWechat路径时,发现可以正常进入项目的index页面。
(这时候走的是tomcat目录下webapps加载的项目)
然后我访问localhost:8080/路径是发现也可以进入项目的index页面
(这时候走的是Host标签下面配置的Context里面的项目,所以用/就可以访问到)
以上就是我的总结,如有不足请提出,我会进行修正的。
后期发现同事们都只加载一遍配置文件,这时候我就意识到问题了,当时是由于我在eclipse配置tomcat启动目录在webapps目录下,但是同事们都在eclipse默认的wtswebapps目录下,所以当时我就将目录进行迁移,之后发现配置文件只加载一次了。
就在前几天,生产上出现了一起重复请求的运维问题,我就想到了这个事情了。
经过研究发现问题出现在tomcat下面的conf目录里面的service.xml配置文件里面的Host节点。
纯净的Host节点配置如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
仅有一个日志的配置。
然后我查看之前eclipse启动项目的tomcat的Host节点发现
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/webapps/ssacWechat_uat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
</Host>
多了一个Context的标签,里面配置项目的路径,与项目对于的rootpath,而修改过tomcat路径的项目host配置为:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/wtswebapps/ssacWechat_uat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
</Host>
看出来问题了吗?
就是说如果Context标签下面的项目,tomcat还会重新加载一遍。
对于service.xml里面Host标签的意思就是,tomcat会优先加载webapps目录下面的项目,当加载完成之后会选择Host节点里面的Context节点对应的项目,这样如果Context节点里面的项目位置恰好在该tomcat下的webapps目录里面的话就会造成同一个项目加载了两遍。(docBase属性代表项目的路径,这里可以使用相对路径或者是绝对路径[相遇对webapps目录而言]path代表web访问的rootPath)
比如说我将Host配置成如下配置:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b"
prefix="localhost_access_log." suffix=".txt"/>
<!--
<Context docBase="F:/Tomcat7/apache-tomcat-7.0.62/webapps/ssacWechat" path="/ssacWechat" reloadable="true"
source="org.eclipse.jst.jee.server:ssacWechat_uat"/>
-->
<Context path="/" docBase="ssacWechat" debug="0" reloadable="true"/>
</Host>
使用start.bat启动tomcat的时候会发现,项目同样是加载了两遍,但是我访问localhost:8080/ssacWechat路径时,发现可以正常进入项目的index页面。
(这时候走的是tomcat目录下webapps加载的项目)
然后我访问localhost:8080/路径是发现也可以进入项目的index页面
(这时候走的是Host标签下面配置的Context里面的项目,所以用/就可以访问到)
以上就是我的总结,如有不足请提出,我会进行修正的。
相关文章推荐
- tomcat部署两个项目只有一个启动问题
- tomcat两个项目同时部署只有一个会启动成功
- 修改web.xml文件之后,tomcat无法把项目自动启动的问题
- SVN 导出一个项目之后,启动Tomcat 报错: java.lang.IllegalArgumentException: Can't convert argument: null
- 【转】关于Tomcat下项目线程启动两次的问题
- 问题记录:同一台电脑上,两台Tomcat运行同样的webapp项目,只能一个启动成功
- 当有两个不同名称,但是内容一样的项目,在tomcat中启动的问题解决
- Android studio导入另外一个项目作为Library后出现两个启动项目等各类问题
- 今天更新代码之后,突然出现一个问题:Tomcat启动时,总是会出现jvm fatal error错误导致tomcat无法正常启动,以下是错误信息:
- tomcat下同时部署两个项目不能正常启动的问题
- Tomcat下部署两个项目启动失败
- 关于【apache- tomcat- 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)
- log4j无日志生成? 我将一个web项目部署在tomcat server.xml配置文件中,当我启动tomcat是无日志输出。
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- tomcat启动eclipse一个项目时,自动加载已经删除的项目,报错java.lang.IllegalArgumentException
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- 两个线程同时调用同一个处理函数的互斥问题
- 关于【apache- tomcat- 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)
- 解决tomcat 5.5启动后第一次访问总是会报一个access denied的问题
- 黑马程序员——java中两个线程对同一个数据做不同操作的安全问题