热交换

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 等)支持字节码的热交换。因此,如果您进行的更改不影响类或方法签名,它应该干净地重新加载,不会产生副作用。