热部署

Spring Boot 支持热部署。本节回答了有关其工作原理的问题。

重新加载静态内容

有几种热重载选项。推荐的方法是使用 [`spring-boot-devtools`](../reference/using/devtools.html),因为它提供了额外的开发时特性,例如对快速应用程序重启和 LiveReload 的支持,以及合理的开发时配置(如模板缓存)。Devtools 通过监控类路径中的更改来工作。这意味着静态资源更改必须经过“构建”才能生效。默认情况下,在 Eclipse 中保存更改时会自动发生这种情况。在 IntelliJ IDEA 中,Make Project 命令会触发必要的构建。由于[默认的重启排除项](../reference/using/devtools.html#using.devtools.restart.excluding-resources),对静态资源的更改不会触发应用程序的重启。然而,它们会触发实时重载。

或者,在 IDE 中运行(尤其是在开启调试的情况下)是进行开发的良好方式(所有现代 IDE 都允许重新加载静态资源,并且通常也允许热替换 Java 类更改)。

最后,可以配置 [Maven 和 Gradle 插件](../build-tool-plugin/index.html)(请参阅 addResources 属性)以支持从命令行运行,直接从源文件重新加载静态文件。如果你使用更高级的工具编写代码,可以将其与外部 css/js 编译器进程一起使用。

无需重启容器即可重新加载模板

Spring Boot 支持的大多数模板技术都包含一个用于禁用缓存的配置选项(本文档后面会介绍)。如果你使用 spring-boot-devtools 模块,这些属性会在开发时为你[自动配置](../reference/using/devtools.html#using.devtools.property-defaults)。

Thymeleaf 模板

如果你使用 Thymeleaf,将 spring.thymeleaf.cache 设置为 false。有关其他 Thymeleaf 自定义选项,请参阅 [`ThymeleafAutoConfiguration`](https://github.com/spring-projects/spring-boot/tree/v3.4.5/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java)。

FreeMarker 模板

如果你使用 FreeMarker,将 spring.freemarker.cache 设置为 false。有关其他 FreeMarker 自定义选项,请参阅 [`FreeMarkerAutoConfiguration`](https://github.com/spring-projects/spring-boot/tree/v3.4.5/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfiguration.java)。

FreeMarker 的模板缓存不支持 WebFlux。

Groovy 模板

如果你使用 Groovy 模板,将 spring.groovy.template.cache 设置为 false。有关其他 Groovy 自定义选项,请参阅 [`GroovyTemplateAutoConfiguration`](https://github.com/spring-projects/spring-boot/tree/v3.4.5/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration.java)。

快速应用程序重启

spring-boot-devtools 模块包含对自动应用程序重启的支持。虽然不如 [JRebel](https://www.jrebel.com/products/jrebel) 等技术那么快,但通常比“冷启动”要快得多。在研究本文档后面讨论的一些更复杂的热重载选项之前,你最好先尝试一下它。

有关更多详细信息,请参阅[开发工具](../reference/using/devtools.html)部分。

无需重启容器即可重新加载 Java 类

许多现代 IDE(Eclipse、IDEA 等)支持字节码的热替换。因此,如果你所做的更改不影响类或方法的签名,它应该能干净地重新加载,没有任何副作用。