跳到主要内容
版本:3.5.10

Hot Swapping

QWen Max 中英对照 Hot Swapping

Spring Boot 支持热交换(hot swapping)。本节回答有关其工作原理的问题。

重载静态内容

有多种热重载(hot reloading)的选项。推荐的方法是使用 spring-boot-devtools,因为它提供了额外的开发时功能,例如支持快速应用重启、LiveReload 以及合理的开发时配置(如模板缓存)。Devtools 通过监控 classpath 的变化来工作。这意味着静态资源的更改必须经过“构建”才能生效。默认情况下,在 Eclipse 中保存更改时会自动触发构建;而在 IntelliJ IDEA 中,则需要执行 Make Project 命令来触发必要的构建。由于 默认的重启排除项,静态资源的更改不会触发应用重启,但会触发 LiveReload。

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

最后,可以配置 Maven 和 Gradle 插件(参见 addResources 属性),以支持从命令行运行时直接从源码重新加载静态文件。如果你使用更高级的工具编写 CSS/JS 代码,可以结合外部的 css/js 编译进程来使用该功能。

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

Spring Boot 所支持的大多数模板技术都包含一个用于禁用缓存的配置选项(本文档稍后会进行描述)。如果你使用了 spring-boot-devtools 模块,这些属性会在开发时自动为你配置

Thymeleaf 模板

如果你使用 Thymeleaf,请将 spring.thymeleaf.cache 设置为 false。其他 Thymeleaf 自定义选项请参见 ThymeleafAutoConfiguration

FreeMarker 模板

如果你使用 FreeMarker,请将 spring.freemarker.cache 设置为 false。其他 FreeMarker 自定义选项请参见 FreeMarkerAutoConfiguration

备注

WebFlux 不支持 FreeMarker 的模板缓存。

Groovy 模板

如果你使用 Groovy 模板,请将 spring.groovy.template.cache 设置为 false。其他 Groovy 自定义选项请参见 GroovyTemplateAutoConfiguration

快速应用重启

spring-boot-devtools 模块包含对自动应用程序重启的支持。虽然它不像 JRebel 这类技术那样快,但通常比“冷启动”要快得多。在深入研究本文档后面讨论的一些更复杂的重载选项之前,你或许应该先尝试一下它。

更多详情,请参阅 Developer Tools 章节。

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

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