本篇内容介绍了“热交换Hot Swapping是怎么工作的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
重新加载静态内容
Spring Boot有很多用于热加载的选项,不过推荐使用spring-boot-devtools,因为它提供了其他开发时特性,比如快速应用重启和LiveReload,还有开发时敏感的配置加载(比如,模板缓存)。
此外,使用IDE开发也是一个不错的方式,特别是需要调试的时候(所有的现代IDEs都允许重新加载静态资源,通常也支持对变更的Java类进行热交换)。
最后,Maven和Gradle插件也支持命令行下的静态文件热加载。如果你使用其他高级工具编写css/js,并使用外部的css/js编译器,那你就可以充分利用该功能。
在不重启容器的情况下重新加载模板
Spring Boot支持的大多数模板技术包含一个禁用缓存的配置选项,如果你正在使用spring-boot-devtools模块,Spring Boot在开发期间会自动为你配置那些属性。
Thymeleaf模板
如果你正在使用Thymeleaf,那就将spring.thymeleaf.cache设置为false,查看ThymeleafAutoConfiguration可以获取其他Thymeleaf自定义选项。
FreeMarker模板
如果你正在使用FreeMarker,那就将spring.freemarker.cache设置为false,查看FreeMarkerAutoConfiguration 可以获取其他FreeMarker自定义选项。
Groovy模板
如果你正在使用Groovy模板,那就将spring.groovy.template.cache设置为false,查看GroovyTemplateAutoConfiguration可以获取其他Groovy自定义选项。
Velocity模板
如果你正在使用Velocity,那就将spring.velocity.cache设置为false,查看VelocityAutoConfiguration可以获取其他Velocity自定义选项。
应用快速重启
spring-boot-devtools模块包括应用自动重启支持,虽然没有其他技术快,比如JRebel或Spring Loaded,但比"冷启动"快。在研究其他复杂重启选项时,你最好自己先试下,更多详情可参考Spring Boot的使用:开发者工具章节。
在不重启容器的情况下重新加载Java类
现代IDEs(Eclipse, IDEA等)都支持字节码的热交换,所以如果你做了一个没有影响类或方法签名的改变,它会利索地重新加载并没有任何影响。
Spring Loaded在这方面走的更远,它能够重新加载方法签名改变的类定义,如果对它进行一些自定义配置可以强制ApplicationContext刷新自己(但没有通用的机制来确保这对一个运行中的应用总是安全的,所以它可能只是一个开发时的技巧)。
使用Maven配置Spring Loaded
为了在Maven命令行下使用Spring Loaded,你只需将它作为依赖添加到Spring Boot插件声明中即可,比如:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.0.RELEASE</version> </dependency> </dependencies> </plugin>
正常情况下,这在Eclipse和IntelliJ IDEA中工作的相当漂亮,只要它们有相应的,和Maven默认一致的构建配置(Eclipse m2e对此支持的更好,开箱即用)。
使用Gradle和IntelliJ IDEA配置Spring Loaded
如果想将Spring Loaded和Gradle,IntelliJ IDEA结合起来,那你需要付出代价。默认情况下,IntelliJ IDEA将类编译到一个跟Gradle不同的位置,这会导致Spring Loaded监控失败。
为了正确配置IntelliJ IDEA,你可以使用idea Gradle插件:
buildscript { repositories { jcenter() } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE" classpath 'org.springframework:springloaded:1.2.0.RELEASE' } } apply plugin: 'idea' idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } // ...
注 IntelliJ IDEA必须配置跟命令行Gradle任务相同的Java版本,并且springloaded必须作为一个buildscript依赖被包含进去。
此外,你也可以启用Intellij IDEA内部的Make Project Automatically,这样不管什么时候只要文件被保存都会自动编译。
“热交换Hot Swapping是怎么工作的”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/224010.html