需要在 Tomcat 中运行同一个 Web 应用程序的多个实例

Posted

技术标签:

【中文标题】需要在 Tomcat 中运行同一个 Web 应用程序的多个实例【英文标题】:Need to run multiple instances of the same web application in Tomcat 【发布时间】:2018-04-23 05:33:52 【问题描述】:

我使用的是 Tomcat 8.5,其中一个 webapp 部署到了默认的 webapps 目录 (/var/lib/tomcat8/webpps/MyWebApp.war)。

现在我想运行同一个 webapp 的第二个实例。我认为我可以在上下文目录(/etc/tomcat8/Catalina/localhost/MyWebApp2.xml)中创建一个新的 MyWebApp2.xml 文件,并设置 appBase="MyWebApp.war",这样我就可以运行第二个实例无需上传和维护单独的战争文件。

但是,当我这样做时,我得到了这个 Tomcat 错误:

docBase [/var/lib/tomcat8/webapps/MyWebApp.war] inside the host appBase has been specified, and will be ignored

听起来我可以通过以下两种方式解决这个问题这些解决方案。难道不能从默认 webapps 目录中的单个 .war 文件运行应用程序的多个实例吗?

【问题讨论】:

【参考方案1】:

我也在使用 Tomcat 8.5,部署同一应用程序的另一个实例非常容易。

您所要做的就是制作一个war 文件的副本。 无需弄乱任何配置文件。 新实例的路径和版本将从war文件的名称中派生。

例如,如果原始应用程序的war文件是myapp.war, 您可以在webapps 目录中简单地执行此操作:

copy myapp.war foo.war

Tomcat 将在几秒钟内检测到新的 war 文件并在 /foo 部署一个新实例。

要在更深的路径上部署并分配版本,请分别使用###。 例如,这个:

copy myapp.war foo#bar##9.war

将在路径/foo/bar 部署应用程序并分配版本9

更新

您应该在问题中提到使用 Tomcat Client Deployer,因为我的建议已经满足您的两个原始条件:1)不上传另一个 war 文件,2)不将 war 文件放在 webapps 目录之外。

据我所知,TCD使用Tomcat Manager作为后端,而Tomcat Manager只上传war文件到webapps目录,这说明了TCD的限制。 在我看来,你有三个选择:

    用其他东西增强 TCD 以添加更多功能。 你提到了一个:ssh。

    使用其他部署解决方案。

    制作一个。 因为您已经确切知道自己想要什么,所以您可以简单地编写一些脚本来实现它。

【讨论】:

我正在使用 Tomcat 客户端部署从 ant 任务部署我的应用程序。这会将单个 .war 文件放入默认的 webapps 目录中。我真的不想将手动任务添加到 Tomcat 框中并复制 .war 文件。似乎应该有一种方法可以从单个 .war 文件运行多个应用程序实例。 顺便说一句,另一个选项几乎可以完成我希望将单个 .war 文件放在默认 webapps 文件夹之外的操作。我可以在 Catalina/localhost 目录中创建多个 .xml 文件,每个文件都可以指向单个 .war 文件。这几乎是我想要的 - 问题是 .war 文件必须存在于默认 webapps 文件夹之外,并且 Tomcat Client Deployer 总是(据我所知)将 .war 文件放入默认 webapps 文件夹中。 【参考方案2】:

为每个使用一个描述符文件。即 /conf/Catalina/localhost 中的多个描述符文件。每个都有不同的名称(app1.xml、app2.xml),因此它们部署在 /app1、/app2 等,但您引用相同的 .war。

app1.xml:

上下文路径="/app1" docBase="/path/to/MyWebApp.war" reloadable="false"

app2.xml:

上下文路径="/app2" docBase="/path/to/MyWebApp.war" reloadable="false"

【讨论】:

如果 docBase 在默认的 webapp 目录中,这将不起作用。我收到此错误:已指定主机 appBase 内的 docBase MyWebApp.war,将被忽略。

以上是关于需要在 Tomcat 中运行同一个 Web 应用程序的多个实例的主要内容,如果未能解决你的问题,请参考以下文章

在Centos7上部署Tomcat及其负载均衡

struts2的web应用能直接在tomcat中运行吗

如何在没有完整安装 Tomcat 的情况下运行 Spring Web 应用程序?

Java Web入门(初识 ‍ JSP)

在 Apache 2 代理 (mod_proxy) 后面的 Tomcat Web 应用程序中发送重定向

Eelipse关于Web服务器Tomcat的配置