讨论: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中的自动编译又是怎么回事?
在这个选项中,如果用户有war exploaded这个Artifact的话,全局监听项目:On ‘Update' action会有一个选项:Update classes and resource.
这是什么意思:我经过实验发现这个操作会停止掉当前的JVM,重新启动。
换句话说,DevTools不会导致JVM重启,而IDEA默认的功能会导致JVM重启。
如图:DevTools 发生文件变更 控制台持续输出 证明JVM没有被Down掉
出现了两个Spring。。。。
但是如果没有这个Jar包的话
无论怎样重启 都只会有一个Spring。
因此 大部分人的热部署值得应该是DevTools的状态
而IDEA带有的功能则属于热启动
以上就是我的猜想,希望大哥们可以给个关系图。