讨论:SpringBoot 和 IDEA的重启关系

昨天和朋友讨论热部署的问题的时候,发现一个含糊不清的东西。

本篇文章只有讨论猜想,没有任何证据证明我的结论!

如有问题欢迎留言讨论!

SpringBootDevTools的热部署属于什么级别

首先我们看一下JavaWeb项目从编写到发布至Tomcat服务器都需要些那些过程。

JavaFile - > ClassFile -> war -> tomcat

上面三个过程是最基本的流程,首先从Java文件到字节码文件是编译过程,然后字节码文件整合静态资源文件是打包过程,打包之后要交给tomcat解包是发布过程。

但是对于用惯了Idea的伙伴们就会发现,Idea在开发环境中不止能导出War,还有一个叫做:war exploaded.

1.Intellij中:War 和 War exploaded的关系

war包是能够复制到TomcatWebapp目录下的文件,由启动的tomcat进行管理。

war exploaded是war解包后的东西

Intellij 如果不在特殊说明的情况下,默认不会生成war包,那项目如何发到Tomcat中呢,Intellij会直接将target目录整理一下,复制到WebApp中

这并不是我们讨论的重点。

2.SpringBootDevTools的热部署和Idea的热部署

问什么之前要加个1呢,因为SpringBootDevTools本身监听的就是Target(或者out目录),当发现这个目录下由文件变动,SpringBoot会在不停止当前JVM的前提下,重启Spring。

那Idea中的自动编译又是怎么回事?

讨论:SpringBoot 和 IDEA的重启关系

在这个选项中,如果用户有war exploaded这个Artifact的话,全局监听项目:On ‘Update' action会有一个选项:Update classes and resource.

这是什么意思:我经过实验发现这个操作会停止掉当前的JVM,重新启动。

 

换句话说,DevTools不会导致JVM重启,而IDEA默认的功能会导致JVM重启。

 

如图:DevTools 发生文件变更 控制台持续输出 证明JVM没有被Down掉

讨论:SpringBoot 和 IDEA的重启关系

出现了两个Spring。。。。

但是如果没有这个Jar包的话

无论怎样重启 都只会有一个Spring。

因此 大部分人的热部署值得应该是DevTools的状态

而IDEA带有的功能则属于热启动

 

以上就是我的猜想,希望大哥们可以给个关系图。