90. Hot Swapping

Spring Boot 支持热插拔。本部分回答有关其工作方式的问题。

90.1 重新加载静态内容

有几种热重装选项。推荐的方法是使用spring-boot-devtools,因为它提供了其他开发时功能,例如对应用程序快速重启和 LiveReload 的支持,以及合理的开发时配置(例如模板缓存)。 Devtools 通过监视 Classpath 的更改来工作。这意味着必须“构建”静态资源更改才能使更改生效。默认情况下,当您保存更改时,这会自动在 Eclipse 中发生。在 IntelliJ IDEA 中,“生成项目”命令将触发必要的构建。由于默认重启排除,对静态资源的更改不会触发应用程序的重新启动。但是,它们确实会触发实时重新加载。

另外,在 IDE 中运行(特别是在调试时运行)是进行开发的好方法(所有现代 IDE 都允许重新加载静态资源,并且通常还允许热交换 Java 类更改)。

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

90.2 重新加载模板,而无需重新启动容器

Spring Boot 支持的大多数模板技术都包含一个用于禁用缓存的配置选项(本文档后面将介绍)。如果您使用spring-boot-devtools模块,那么在开发时这些属性就是automatically configured

90.2.1 Thymeleaf 模板

如果您使用 Thymeleaf,请将spring.thymeleaf.cache设置为false。有关其他 Thymeleaf 定制选项,请参见ThymeleafAutoConfiguration

90.2.2 FreeMarker 模板

如果您使用 FreeMarker,请将spring.freemarker.cache设置为false。有关其他 FreeMarker 自定义选项,请参见FreeMarkerAutoConfiguration

90.2.3 Groovy 模板

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

90.3 快速启动应用程序

spring-boot-devtools模块包括对应用程序自动重启的支持。虽然不如JRebel等技术快,但通常比“冷启动”要快得多。在研究本文档后面讨论的一些更复杂的重载选项之前,您可能应该先尝试一下。

有关更多详细信息,请参见第 20 章,开发人员工具部分。

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

许多现代的 IDE(Eclipse,IDEA 等)都支持字节码的热交换。因此,如果所做的更改不影响类或方法的签名,则应干净地重新加载而没有副作用。