外部Tomcat中的自定义上下文路径

5
我创建了一个Spring-Boot应用程序,想在外部Tomcat 8中运行它。
在Spring-Boot应用程序中,可以使用属性server.context-path选择上下文路径,但由于我正在使用外部Tomcat 8,因此不使用此属性。
因此,我查看了tomcat-8文档,其中说明:
如果您要使用与基本文件名无关的上下文路径部署WAR文件或目录,则必须使用以下选项之一以防止双重部署:
  • 禁用autoDeploy和deployOnStartup,并在server.xml中定义所有上下文
  • 将WAR和/或目录定位在主机的appBase之外,并使用具有docBase属性的context.xml文件来定义它。
由于我不想污染server.xml,所以我选择了第二个选项。因此,我将war文件放在/home/myuser/myapp/application-1.0.0.war中,并在conf/Catalina/localhost下放置了一个名为application-1.0.0.xml的上下文文件。该文件仅包含以下两行:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" docBase="/home/myuser/myapp"/>

我在日志中看到Tomcat8成功启动,应用程序似乎已部署在Tomcat管理器中,但是:
  • 路径为/application-1.0.0而不是/myapp
  • 此外,在work目录中出现了一个名为application-1.0.0的目录,但保持为空。
  • 日志没有显示任何与Spring相关的日志,就好像从未初始化过应用程序一样。
注意:我知道war包是正确的,因为如果我将其放置在webapp目录中(默认上下文路径),它可以正常工作。 注意:如果我将application-1.0.0.xml重命名为foo.xml,则Tomcat管理器会显示该应用程序已部署在上下文路径/foo下(但仍未启动)。
有什么想法吗?
2个回答

2

找到了答案:

  • 关于上下文路径,上下文文件的path属性确实被忽略:

只有在server.xml中静态定义上下文时才应使用此属性。在所有其他情况下,路径将从用于 .xml 上下文文件或 docBase 的文件名中推断出来。

  • 关于docBase属性,我误解了以下句子:

将WAR和/或目录定位在Host的appBase之外,并使用具有docBase属性的context.xml文件进行定义。

实际上,在docBase中,我放置了包含war的目录路径,而不是war本身的路径。


1
那么正确的配置是什么呢?而且,每次部署新版本时,您需要更新文件吗? - ACV
2
我也需要答案。你能发整个解决方案吗? - Fjordo

0
如果有人需要,以下代码(放置在conf\Catalina\localhost\service-discovery.xml中)适用于我在Tomcat 9上的使用。
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/service-discovery" docBase="D:/Projects/codebase/apps/service-discovery/target/service-discovery.war"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接