- tomcat采用默认配置,然后将war包部署到webapps目录下,重启访问http://localhost/projectname可达
- 后来觉得地址里包含projectname太不友好,想省略项目地址,则server.xml,host之间增加了<Context path="" docBase="webapps/projectname" debug="0" reloadable="true" />,则jenkins部署war包后,进行重启,发现tomcat启动了,但项目启动未正常服务,同时发现目录webapps下,projectname.war未解压,反而是生成一个新的ROOT目录,验证服务接口,服务异常。
- 再次尝试手动重启tomcat,发现目录webapp下,projectname.war解压出了projectname目录,然后验证服务接口,发现正常
- 后来详细对比jenkins发版(jenkins发版会删除webapps下的projectname文件夹)启动日志,和手动重启tomcat启动日志发现,jenkins发版会自动部署项目ROOT文件夹,手动重启会自动部署项目为projectname文件夹
- 按理来说,因为<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">和<Context path="" docBase="webapps/projectname" debug="0" reloadable="true" />,projectname项目会被加载两次,第一次加载为ROOT文件夹,第二次加载为projectname文件夹,这很可能是造成服务异常的主要原因
- 最终解决,去掉<Context path=""的配置项,将后端服务用nginx代理。访问的时候就可以省略项目名称了,还有一种方法就是,不去掉<Context path="",但把<Host appBase="webapps"改为<Host appBase=""