在容器 tomcat 服务器上更改已部署(Spring Boot)war 的上下文路径。所以它不是 demo-0.01-SNAPSHOT

Posted

技术标签:

【中文标题】在容器 tomcat 服务器上更改已部署(Spring Boot)war 的上下文路径。所以它不是 demo-0.01-SNAPSHOT【英文标题】:Changing the context path of deployed (Spring Boot) war on a container tomcat server. So it is not demo-0.01-SNAPSHOT 【发布时间】:2017-10-06 22:50:27 【问题描述】:

我尝试使用许多配置来部署我的站点,以使其从正在部署的战争名称发生变化。有没有办法轻松做到这一点。部署将部署到位于其他地方的 tomcat。例如bitnami 实例

我在 application.properties 中尝试了各种设置组合,但没有任何区别:

 server.servlet.context-path=/a
    server.servlet.path=/b
    spring.webservices.path=/c
    server.contextPath=/m

战争被称为 demo-0.0.01-SNAPSHOT.war,当它被放到 webapps 目录中时,它会创建相同的命名目录,然后该站点有一个 /demo-0.0.01-SNAPSHOT 路径。我认为在 Spring Boot 时代这会很容易,但像我这样的傻瓜还没有解决。还是现在人们只是使用 tomcat 部署嵌入式版本并运行它们?

(顺便说一句,我也尝试过root.xml,没有运气......除非我在我的Windows机器上做错了,首先在我的开发机器上测试,Linux部署)

任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

用于指定应用程序上下文路径的 Spring Boot 属性是:server.contextPath。 但是,您将 WAR 部署到独立的 Tomcat 实例中这一事实不允许使用它。 在此配置中,您不能使用server.contextPath 和其他特定于容器的属性(例如server.port)。 它们旨在与嵌入式 Tomcat 实例一起使用。

独立的 Tomcat 实例确实保留了对 Spring Boot 提供的这些设施的控制。 所以你得从独立Tomcat的配置文件中配置(一般是server.xml或者ROOT.xml方式)。

【讨论】:

感谢您的回答大卫。想了很多,很高兴你把它清理干净,这样我就不会浪费时间了。只部署一个没有 apache 和 tomcat 容器的嵌入式 tomcat 是否明智(我的静态将从 S3 部署)? 想我可能在这里找到答案:docs.spring.io/spring-boot/docs/current/reference/html/… 你好。对不起,我没有注意你的评论。今天对答案的支持让我注意到了这一点。是的,我认为这些属性(与 Spring Boot 中的许多其他属性一样)旨在与嵌入式 tomcat 一起使用。但是,如果您想使用旨在与 Apache 一起使用的 Spring Boot 属性,那么拥有一个带有嵌入式 tomcat 的硬安装 apache 服务器应该不是问题。如果您对此主题有有趣的反馈,请不要犹豫,为您自己的问题添加答案。 我正在使用 wildlfy 什么是解决方案【参考方案2】:

finalName 设置添加到 maven 的 pom.xml 将使打包的 war 文件名为其命名。例如。

<build>
...
<finalName>myapp</finalName>
</build>

打包的文件名将是 myapp.war 。当您部署到 tomcat 时,它会将上下文设置为文件名。

【讨论】:

此解决方案可以很好地控制应用程序配置 (pom.xml) 中的上下文路径,而无需外部 Tomcat 配置。

以上是关于在容器 tomcat 服务器上更改已部署(Spring Boot)war 的上下文路径。所以它不是 demo-0.01-SNAPSHOT的主要内容,如果未能解决你的问题,请参考以下文章

多个Spring Boot项目部署在一个Tomcat容器无法启动

Springbooy-自动装载

服务器 tomcat 未部署最新的 WAR 更改

Docker 部署 nginx + tomcat

Vue.js项目部署在Tomcat服务器上

tomcat部署