SpringBoot热部署工具devtools官方文档地址:docs.spring.io/spring-boot…
以下内容建议在本地开发调试时使用,生产环境勿用,避免出现网路安全隐患,只有在严格受信任的网络环境下才可启用。热部署工具本身的目的是用于提升开发效率,所以我们优先考虑本地开发这种场景。
1、关于热部署(Hot Deploy)产生的背景
1)热部署出现前
在没有使用热部署的情况下,一个稍微大点的项目启动就要七八秒甚至十几秒的启动时间,当然这取决于你的机器性能,不过毫无疑问,不管你的机器性能如何强大,也耗不过日益增长的项目体量,所以迫切需要无需重新启动项目也能将代码的增加修改同步到服务器的手段。
在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率。如果当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样是不是就能大幅提高我们开发的效率呢?
这时,就出现了热部署模式。
2)热部署出现后
众所周知,热部署是在服务运行时会重新部署项目,它所针对的是容器或者整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间。若部署了新的资源或者修改了一些代码,需要在不停机的情况下的重新加载整个应用。
其原理是加载整个应用程序,包括运行需要使用到的各种文件,比如 Jar 包,JS 或者 CSS 或者 html 等静态文件或者一些配置文件等。以 Tomcat 为例,它首先校验是否开启了热部署,并且发生了修改,它有一个后台线程,定期进行 reload 检测,如果检测需要重新部署,即热部署,则先停止,然后启动,这期间会清理 session,清空内存。
那在今天我们要聊的主角spring-boot-devtools作为一款知名的热部署插件,它是如何优化的热部署方式的呢?请继续往下看。
2、spring-boot-devtools插件原理
虽然devtool工具配置简单且容易上手,但是很少有人理解其底层实现原理;为什么这么说呢?这就像我们使用每一个技术,一定有选择这个技术的理由,那就是它的诸多优点吸引了你,所以你才选择了它。
所以,在我们使用这个工具前,需要做到知其然知其所以然。否则可能仅仅是知道它能做热部署而已。
我们可以先来设想下,如果让你设计热插拔插件,你会怎么做?大致需要满足的几个要求如下,
1)代码修改完后,无需手动重启