热替换

Spring Boot 支持热替换。 本节解答其工作原理相关的问题。

重新加载静态内容

热重载有多种选择。 推荐方式是使用 spring-boot-devtools,它提供了额外的开发时特性,如快速应用重启、LiveReload 以及合理的开发时配置(如模板缓存)。 Devtools 通过监控 classpath 变更实现工作。 这意味着静态资源的变更必须经过“构建”才能生效。 默认情况下,在 Eclipse 中保存更改时会自动完成此操作。 在 IntelliJ IDEA 中,使用 Make Project 命令触发所需的构建。 由于 默认重启排除项,对静态资源的更改不会触发应用重启。 但它们会触发 live reload。

另外,在 IDE 中运行(尤其是开启调试时)也是开发的好方式(所有现代 IDE 都支持静态资源的重新加载,通常也支持 Java 类变更的热替换)。

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

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

Spring Boot 支持的大多数模板技术都包含禁用缓存的配置选项(后文会介绍)。 如果你使用 spring-boot-devtools 模块,这些属性会在开发时被 自动配置

Thymeleaf 模板

如果你使用 Thymeleaf,请将 spring.thymeleaf.cache 设为 false。 更多 Thymeleaf 定制选项参见 ThymeleafAutoConfiguration

FreeMarker 模板

如果你使用 FreeMarker,请将 spring.freemarker.cache 设为 false。 更多 FreeMarker 定制选项参见 FreeMarkerAutoConfiguration

FreeMarker 的模板缓存在 WebFlux 下不支持。

Groovy 模板

如果你使用 Groovy 模板,请将 spring.groovy.template.cache 设为 false。 更多 Groovy 定制选项参见 GroovyTemplateAutoConfiguration

快速应用重启

spring-boot-devtools 模块支持自动应用重启。 虽然速度不及 JRebel 等技术,但通常比“冷启动”快得多。 建议先尝试此方案,再考虑文档后续介绍的更复杂重载方式。

更多详情参见 开发者工具

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

许多现代 IDE(Eclipse、IDEA 等)支持字节码热替换。 因此,只要你的更改不影响类或方法签名,通常都能无副作用地热加载。