Hot Swapping

Spring Boot 支持热交换。本部分回答有关其工作原理的问题。

Reload Static Content

热加载有几种选项。建议的方法是使用 spring-boot-devtools,因为它提供额外的开发时间特性,例如支持快速应用程序重新启动和 LiveReload 以及合理开发现时间配置(例如,模板缓存)。Devtools 的工作原理是监视类路径以查找更改。这意味着需要对静态资源更改进行“构建”才能使更改生效。在您保存更改时,Eclipse 中默认会自动执行此操作。在 IntelliJ IDEA 中,“创建项目”命令会触发必要的构建。由于 default restart exclusions,对静态资源所做的更改不会触发应用程序的重新启动。但是,它们会触发实时重新加载。

另外,在 IDE 中运行(尤其是调试模式开启时)是进行开发的一种好方法(所有现代化的 IDE 都允许重新加载静态资源,通常也允许热交换 Java 类更改)。

最后,Maven and Gradle plugins 可以进行配置(请参阅 addResources 属性)以支持直接从源代码重新加载静态文件,从而支持从命令行运行。如果您使用更高级别的工具编写代码,则可以将其与外部 css/js 编译器进程一起使用。

Reload Templates without Restarting the Container

Spring Boot 支持的大多数模板化技术都包括一个配置选项,用于禁用缓存(稍后在本文档中描述)。如果您使用 spring-boot-devtools 模块,则这些属性在开发时间会自动 automatically configured 给您。

Thymeleaf Templates

如果您使用 Thymeleaf,请将 spring.thymeleaf.cache 设置为 false。请参阅 {code-spring-boot-autoconfigure-src}/thymeleaf/ThymeleafAutoConfiguration.java[ThymeleafAutoConfiguration] 了解其他 Thymeleaf 自定义选项。

FreeMarker Templates

如果你使用 FreeMarker,将 spring.freemarker.cache 设置为 false。请参阅 {code-spring-boot-autoconfigure-src}/freemarker/FreeMarkerAutoConfiguration.java[FreeMarkerAutoConfiguration] 了解其他 FreeMarker 自定义选项。

Groovy Templates

如果你使用 Groovy 模板,将 spring.groovy.template.cache 设置为 false。请参阅 {code-spring-boot-autoconfigure-src}/groovy/template/GroovyTemplateAutoConfiguration.java[GroovyTemplateAutoConfiguration] 了解其他 Groovy 自定义选项。

Fast Application Restarts

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

有关更多详细信息,请参阅 Developer Tools 部分。

Reload Java Classes without Restarting the Container

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