Spring Boot 支持热插拔。以下为其工作原理。

JRebel链接

java实现热插拔插件 spring插件热插拔_spring

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

或者,在 IDE 中运行(尤其是在调试时)是一种很好的开发方式(所有现代 IDE 都允许重新加载静态资源,并且通常还允许热交换 Java 类更改)。

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

  1. 在不重启容器的情况下重新加载模板
    Spring Boot 支持的大多数模板技术都包含一个禁用缓存的配置选项(本文档稍后会介绍)。如果您使用该spring-boot-devtools模块,这些属性会在开发时自动为您配置。

2.1. Thymeleaf模板
如果您使用 Thymeleaf,请设置spring.thymeleaf.cache为false. 有关ThymeleafAutoConfiguration其他 Thymeleaf 自定义选项,请参阅。

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

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

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

有关更多详细信息,请参阅using.html部分。

  1. 在不重新启动容器的情况下重新加载 Java 类
    许多现代 IDE(Eclipse、IDEA 等)支持字节码的热交换。因此,如果您进行不影响类或方法签名的更改,它应该干净地重新加载而没有副作用。