使用 tomcat7 管理器进行部署,更改已上传 war 的目录

使用 tomcat7 管理器进行部署,更改已上传 war 的目录

我正在使用 tomcat 管理器进行 .war 部署,由于我在 server.xml 下定义了主机,因此它启动了两次 webapp。因此它为 example.com 部署了一个应用程序,为 /example 部署了另一个应用程序。

据我所知,解决这个问题的唯一方法是将我的 .war 放在 webapps 文件夹之外,但是是否有可能在部署时指定运行我的 war 的目录?

        <Host name="myapp.com" appBase="/var/lib/tomcat7/webapps/myapp" unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="."/>
        </Host>

        <Host name="deploy.myapp.com" appBase="/var/lib/tomcat7/webapps/manager" unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="."/>
        </Host>
    </Engine>

答案1

根据文档...

使用自动部署时,XML Context 文件定义的 docBase 应该位于 appBase 目录之外。

您正在设置文档库到“。”,不在应用库目录。这不太好,可能会导致双重部署。有几种方法可以解决这个问题。

1.) 重新构建“/var/lib/tomcat7/webapps”下的文件夹,使其包含“myapp.com”和“deploy.myapp.com”子目录。然后将应用库对于每个主持人标记,使其指向适当的子目录。删除语境标签,不推荐服务器.xml无论如何,只需将“myapp”子目录重命名为“ROOT”(完全一样,大小写很重要)。对“manager”执行相同操作,将其重命名为“ROOT”。

这将给你一个像这样的结构:

/var/lib/tomcat7/webapps/myapp.com/ROOT /var/lib/tomcat7/webapps/deploy.myapp.com/ROOT

最终结果是您将拥有两台主机,每台主机都有一个应用程序部署为ROOT应用程序(即/)。

2.) 继续维持现状,但要保持现状自动部署错误的。您直接在中定义上下文服务器.xml,所以你不需要自动部署。事实上,禁用它应该可以摆脱双重部署。

对这种方法稍作修改,就可以引导自动部署为真,但使用部署忽略属性,以便 Tomcat 的自动部署跳过您在 server.xml 中使用上下文手动配置的应用程序。

我推荐选项#1,因为这是最干净的方法。

相关内容