Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解

1、部署环境:
centOS+nginx+tomcat8集群
2、应用架构
springboot +springcloud
3、场景还原:
将本地项目打war包扔到tomcat8的webapps目录下,如图所示:
Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解
修改tomcat的conf文件夹下的server.xml ,使之能够通过”/”目录进行访问,如图所示:添加Context 标签,并制定docBase为自己的应用包名:
Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解
并到 /bin下执行./startup.sh,启动tomcat
4、问题描述:
启动tomcat后会在webapps目录的ROOT目录下生成一个和ccx-axis-1.0-SNAPSHOT相同的一个目录,如图所示:Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解
两个文件夹中的内容是完全相同的,而且在启动tomcat后,此应用会启动两次,第一次能正常启动,第二次启动则会产生端口号本站用等错误,具体请看日志:
第一次启动:
Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解
第二次启动:
Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解
5、解决方案:
网上百度了一些解决方案,都没有说ROOT目录如何删除掉或者为什么会启动两次的问题,后来了解到,如果tomcat的server.xml文件中的docbase的地址为一个war包时候,如docBase=”C:/apache-tomcat-6.0.32/myapps/bc.war”,那么tomcat会解压war包到ROOT目录下,如果docBase的地址为一个解压好的目录时,tomcat就不会再解压war包,所以就不会有ROOT目录了,
我的server.xml配置的完全没有问题,也没有指向war包,为啥也不行呢,我先把war包删除试一下:
结果:不会生成ROOT目录,可是tomcat里面的应用仍然会启动两次(注意,不是tomcat启动两次,是部署在tomcat里的应用会启动两次,就相当于有两个解压好的war包仍在tomcat的webapps里,且这俩包都是一样的);
在原来的基础上做第二次尝试:修改conf路径下的server.xml文件的appBase目录,将appBase的指向目录由webapps修改为空,并重启tomcat,则完美解决问题!!!具体如图:Tomcat中的应用无缘无故启动两次及生成ROOT目录问题详解