首页 文章

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

提问于
浏览
3

我创建了一个Spring-Boot应用程序,我希望在外部tomcat 8中运行 .

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

因此,我看了一下tomcat-8 documentation,其中说明:

如果要使用与基本文件名无关的上下文路径部署WAR文件或目录,则必须使用以下选项之一来防止双重部署:禁用autoDeploy和deployOnStartup并在服务器中定义所有上下文.xml在Host的appBase之外找到WAR和/或目录,并使用带有docBase属性的context.xml文件来定义它 .

由于我不想污染 server.xml ,我选择了第二个选项 . 因此,我在 /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 .

  • 此外,目录 application-1.0.0 出现在 work 目录中,但保持为空 .

  • 日志不显示任何与 spring 相关的日志,就好像应用程序从未初始化一样 .

Note :我知道战争是正确的,因为如果我把它放在 webapp 目录中(虽然使用默认的上下文路径)它是有效的 .

Note :如果我将 application-1.0.0.xml 重命名为 foo.xml ,则tomcat管理器会显示该应用程序已部署在context-path /foo 下(但它仍未启动) .

有任何想法吗?

1 回答

  • 2

    找到答案:

    • 关于context-path,确实忽略了上下文文件的属性 path

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

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

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

    实际上,在 docBase 中,我将路径放到包含war的目录而不是war本身的路径中 .

相关问题