热插拔
Spring Boot 支持热交换。本节回答有关其工作原理的问题。
重新加载静态内容
热重载有几种选择。推荐的方法是使用 spring-boot-devtools,因为它提供了额外的开发时功能,例如支持快速应用程序重启和 LiveReload,以及合理的开发时配置(例如模板缓存)。Devtools 通过监控类路径的变化来工作。这意味着静态资源的更改必须“构建”才能使更改生效。默认情况下,在 Eclipse 中,当你保存更改时,这会自动发生。在 IntelliJ IDEA 中,Make Project 命令会触发必要的构建。由于默认的重新启动排除项,静态资源的更改不会触发应用程序的重新启动。但是,它们会触发实时重新加载。
或者,在集成开发环境(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 等)支持字节码的热交换。因此,如果你所做的更改不影响类或方法的签名,它应该能够干净地重新加载,而不会产生副作用。