86. 热交换

    Spring Boot支持热交换。这一章回答关于它如何工作的问题。

    86.1 重新加载静态内容

    对于热重载,有好几种选择。推荐的方式是使用spring-boot-devtools,因为它提供了额外的开发时特性,如支持快速应用启动和LiveReload以及可感知 的开发时配置(如模板缓存)。Devtools 通过监视classpath变化来工作。这意味着静态资源改变必须为改变“built”才能生效。默认地,这在eclipse里自动发生,当你保存你 的更改时。在IntelliJ IDEA里,Make Project命令触发必要的构建。由于default restart exclusions,静态资源的改变不会触发应用的重启。但是,它们触发一个 实时重加载(live reload)。

    或者,运行在一个IDE里(尤其是带debug的)是一个很好的方式来开发应用(所有现代的IDE允许静态资源重新加载并且也允许java 类改变时热交换)。

    最后,Maven and Gradle plugins可以被配置(查阅addResource属性)来支持从源码直接重新加载静态文件并从命令行运行。You can use that with an external css/js compiler process if you are writing that code with higher-level tools.

    86.2 重新加载模板而不启动容器

    通过Spring Boot包含一个配置选项来关闭缓存,大部分模板技术被支持。如果你使用spring-boot-devtools模块,这些属性会在开发时为你自动配置

    86.2.1 Thymeleaf模板

    如果你使用Thymeleaf,设置spring.thymeleaf.cachefalse。查阅ThymeleafAutoConfiguration了解其他定制选项。

    86.2.2 FreeMarker模板

    如果你使用FreeMarker,设置spring.freemarker.cachefalse。查阅FreeMarkerAutoConfiguration了解其他定制选项。

    86.2.3 Groovy模板

    如果你使用Groovy,设置spring.groovy.template.cachefalse。查阅GroovyTemplateAutoConfiguration了解其他定制选项。

    86.3 快速应用启动

    spring-boot-devtools模块包含对应用自动重启的支持。尽管不会像JRebel那样快,但是也显著地比冷启动快很多。你应该尝试一下它在研究更多本文后续讨论的复杂重新加载选项前。

    了解更多细节,查阅20章,开发工具

    86.4 重新加载Java类而不启动容器

    许多现代的IDE(包括Eclipse,IDEA,和其他的)支持字节码级的热交换。因此,如果你做出一个不影响类或者方法签名的改变,它应该会干净的重新加载而没有任何副作用。