需要在 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 应用程序的多个实例的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有完整安装 Tomcat 的情况下运行 Spring Web 应用程序?