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.cache
为false
。查阅ThymeleafAutoConfiguration了解其他定制选项。
85.2.2 FreeMarker模板
如果你使用FreeMarker,设置spring.freemarker.cache
为false
。查阅FreeMarkerAutoConfiguration了解其他定制选项。
85.2.3 Groovy模板
如果你使用Groovy模板,设置spring.groovy.template.cache
为false
。查阅GroovyTemplateAutoConfiguration了解其他定制选项。
85.3 快速应用重启
spring-boot-devtools
模块包含自动应用重启支持。虽然不想如JRebel这样的技术这么快,它通常也显著地(significantly)比冷启动要快。你应该在调查(investigation)一些后文讨论的多混合重载选项之前尝试一下它。
更多细节,查阅xx
85.4 不用重启容器就重载Java类
许多现代IDE(Eclipse,IDEA等等)支持字节码热交换。因此,如果你做了不影响类的修改或者方法签名(signature),它应该没有任何副作用的干净地重载。