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

时间:2016-10-07 13:33:01

标签: tomcat spring-boot tomcat8

我制作了一个Spring-Boot应用程序,我希望在外部tomcat 8中运行。

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

因此,我看了tomcat-8 documentation,其中指出:

  

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

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

由于我不想污染server.xml,我选择了第二种选择。因此,我在/home/myuser/myapp/application-1.0.0.war找到了战争,并在application-1.0.0.xml下放置了一个上下文文件名conf/Catalina/localhost。该文件仅包含这两行:

<?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目录中,但仍为空。
  • 日志不会显示任何与弹簧相关的日志,就像应用程序从未初始化一样。

注意:我知道战争是正确的,因为如果我把它放在webapp目录中(虽然有默认的上下文路径),它就可以了。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

找到答案:

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

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

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

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

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

答案 1 :(得分: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"/>