部署 JAR 文件后更新 spring 引导静态资源

Updating spring boot static resources after deploying JAR file

我开发了一个带有 Spring 引导的 REST API。我已经将 Angular 用于前端并将其文件添加到 resources/static。一切正常。

我目前以胖 JAR 格式部署我的应用程序。 spring 引导应用程序不会经常更改,但我必须每天更改前端。有没有办法以某种方式将更新的 angular 文件注入当前部署的 JAR 文件?或者我应该将包装更改为 WAR 并使用外部 tomcat 服务器?

从字面上看,是的,您可以使用 jar command:

更新现有的 jar 文件

jar uf jar-file input-file(s)

但是,您仍然需要重新启动该过程。

我想,您的问题更多是关于 hot deploymenthot swapping - 如何在不停止 运行 进程的情况下添加新文件。

如果 spring-boot 应用程序在生产环境中嵌入了 Tomcat,您仍然需要重新启动它。

因此,实现 angular 前端热部署的最简单方法是拆分 jar,提取 angular 应用程序,然后单独部署它。

如您所述,您可以将 war 和 angular 应用程序部署到 Tomcat 实例。如果您使用基于 Linux 的机器,我建议将 angular 应用程序打包到 tar/zip 并将其提取到 Apache httpd 或 nginx 网络服务器。

此外,您还可以使用 docker-compose for live reloading

开发环境 的情况下要容易得多,因为您可以结合使用 IDE 支持和 spring-boot- devtools 实现热插拔,更多解释见 spring-boot docs.

理论上您可以将任何目录定义为静态文件的来源:

@Configuration
public class ResourceConfig implements WebMvcConfigurer{

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
      .addResourceHandler("/resources/**")
      .addResourceLocations("file:///e:/app/resources/public/")
     //other options
}}

不知道它是否适用于生产,我只做了一些原型设计。 Baeldung page (old article, but updated to Spring 5), and official spring docs

上还有更多内容