热替换

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

Groovy 模板

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

快速应用重启

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

有关更多详细信息,请参阅开发者工具部分。

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

许多现代 IDE(Eclipse、IDEA 等)都支持字节码的热交换。因此,如果您进行的更改不影响类或方法签名,则它应该能够干净地重新加载,并且不会产生任何副作用。