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.cache
为false
。查阅ThymeleafAutoConfiguration
了解其他定制选项。
86.2.2 FreeMarker模板
如果你使用FreeMarker,设置spring.freemarker.cache
为false
。查阅FreeMarkerAutoConfiguration
了解其他定制选项。
86.2.3 Groovy模板
如果你使用Groovy,设置spring.groovy.template.cache
为false
。查阅GroovyTemplateAutoConfiguration
了解其他定制选项。
86.3 快速应用启动
spring-boot-devtools
模块包含对应用自动重启的支持。尽管不会像JRebel那样快,但是也显著地比冷启动快很多。你应该尝试一下它在研究更多本文后续讨论的复杂重新加载选项前。
了解更多细节,查阅20章,开发工具
86.4 重新加载Java类而不启动容器
许多现代的IDE(包括Eclipse,IDEA,和其他的)支持字节码级的热交换。因此,如果你做出一个不影响类或者方法签名的改变,它应该会干净的重新加载而没有任何副作用。