跳到主要内容
版本:4.0.2

Hot Swapping

QWen Max 中英对照 Hot Swapping

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

重载静态内容​

有几种热重载的选项。推荐的方法是使用 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、IntelliJ IDEA 等)支持字节码的热替换。因此,如果你所做的更改不影响类或方法签名,它应该能够干净地重新加载,且不会产生副作用。