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 等)都支持字节码的热交换。因此,如果所做的更改不影响类或方法的签名,则应干净地重新加载而没有副作用。