85. 热交换

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

    85.1 重载静态内容

    关于热重载,这里有几个选项。推荐的方式(approach)是使用spring-boot-devtools,因为它提供了额外的开发时特性,比如支持快速应用启动和LiveReload合理的(sensible)开发时配置(如模板缓存)。Devtools通过监视classpath下的改动工作。这意味着静态资源改变要生效必须‘built’。默认地,在Eclipse里这自动发生,当你保存改变时。在IntelliJ IDEA中,Make Project命令触发必要的构建。由于default restart exclusions,静态资源的改变不触发应用的重启,但是它们触发一个live reload。

    要不然,在一个IDE(尤其是用debug)内运行是一个好方式来开发(所有现代的IDE允许静态资源的重载并且通常也允许Java类改变的热交换)。

    最后,Maven和Gradle插件可以配置类支持从命令行与直接从源(source)重加载的静态文件一起运行。你可以这样用和一个外部的(external)css/js编译过程,如果你用更高水平的工具编写代码。

    85.2 不用重启容器就重加载模板

    Spring Boot支持大部分模板技术包含一个配置选项来禁止缓存(这份文档随后描述)。如果你使用spring-boot-devtools模块,这些属性在开发时是为你自动配置的。

    85.2.1 Thymeleaf模板

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

    85.2.2 FreeMarker模板

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

    85.2.3 Groovy模板

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

    85.3 快速应用重启

    spring-boot-devtools模块包含自动应用重启支持。虽然不想如JRebel这样的技术这么快,它通常也显著地(significantly)比冷启动要快。你应该在调查(investigation)一些后文讨论的多混合重载选项之前尝试一下它。

    更多细节,查阅xx

    85.4 不用重启容器就重载Java类

    许多现代IDE(Eclipse,IDEA等等)支持字节码热交换。因此,如果你做了不影响类的修改或者方法签名(signature),它应该没有任何副作用的干净地重载。