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

Arn*_*lle 5 tomcat tomcat8 spring-boot

我制作了一个想要在外部 tomcat 8 中运行的 Spring-Boot 应用程序。

在 Spring-Boot 应用程序中,可以使用server.context-pathin属性选择上下文路径,application.properties但由于我使用的是外部 tomcat 8,因此未使用此属性。

因此,我查看了tomcat-8 文档,其中指出:

如果要使用与基本文件名无关的上下文路径部署 WAR 文件或目录,则必须使用以下选项之一来防止双重部署:

  • 禁用 autoDeploy 和 deployOnStartup 并在 server.xml 中定义所有上下文
  • 在主机的 appBase 之外找到 WAR 和/或目录,并使用带有 docBase 属性的 context.xml 文件来定义它。

由于我不想污染server.xml,我选择了第二个选项。因此,我找到了战争,/home/myuser/myapp/application-1.0.0.warapplication-1.0.0.xmlconf/Catalina/localhost. 该文件仅包含这两行:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" docBase="/home/myuser/myapp"/>
Run Code Online (Sandbox Code Playgroud)

我可以在日志中看到 tomcat8 成功启动,该应用程序似乎部署在 tomcat 管理器中,但是:

  • 路径是/application-1.0.0而不是/myapp
  • 此外,一个目录application-1.0.0出现在work目录中但保持为空。
  • 日志不显示任何与弹簧相关的日志,就好像应用程序从未初始化过一样。

注意:我知道战争是正确的,因为如果我将它放在webapp目录中(尽管使用默认上下文路径)它可以工作。

注意:如果我重命名application-1.0.0.xmlfoo.xml,tomcat 管理器会显示应用程序部署在上下文路径下/foo(但它仍然从未启动)。

有任何想法吗?

Arn*_*lle 2

找到了答案:

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

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

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

找到主机 appBase 外部的 WAR 和/或目录,并使用带有 docBase 属性的 context.xml 文件来定义它。

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

  • 我也需要答案。您能发布整个解决方案吗? (2认同)