目录

  1. 概述
  2. Spring-boot-devtools
    1. 使用
    2. 自动构建设置
    3. Spring-dev-tools 总结
  3. IDEA 热部署
  4. 总结
  5. 附录

概述

❓什么是热启动?什么是冷启动?

原本是计算机启动相关的术语,冷启动是指电脑启动的一种方式,当电脑切断电源,在关机状态下按下 POWER 启动计算机;热启动是指计算机已经开启的状态下,通过菜单、快捷键或键盘重新引导操作。

将类似的概念应用到软件应用中,当用户启动应用程序时,如果后台没有该应用程序的进程,系统重新给应用程序分配一个进程,这种启动应用的方式称为:冷启动;当用户启动应用程序时,后台已经存在该程序的进程,下次启动应用时,唤醒已存在的进程,这种方式就称为:热启动

❓什么是热部署?

热部署是在应用正在运行的时候升级软件,却不需要重新启动应用的手段,也有称为热更新、热替换、热加载等等

❓为什么需要热部署

在使用ideaspringboot项目开发时,每次修改完源代码之后都需要重新启动应用,对于开发而言,非常的麻烦。使用热部署操作后,能够更加方便进行开发,每次修改代码之后都会生效

Spring-boot-devtools

spring-boot-devtools 是 Spring Boot 提供的开发者工具,它会监控当前应用所在的 classpath 下的文件发生变化,进行自动重启

🎶spring-boot-devtools没有采用热部署的方式,而是一种较快的重启方式

其官方文档解释如下:

Spring Boot 通过使用两个类加载器来提供了重启技术,不改变的类(例如,第三方 jar)被加载到 base 类加载器中;经常处于开发状态的类被加载到 restart 类加载器中

Spring Boot 2.x 中文文档

✨当应用重启时,restart 类加载器将被丢弃,并重新创建一个新的。这种方式意味着应用重启比冷启动要快得多,因为省去 base 类加载器的处理步骤,并且可以直接使用

使用

在项目的 pom.xml 中,引入 spring-boot-devtools 依赖如下

pom.xml
1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 可选 -->
<optional>true</optional>
</dependency>

热部署并不会生效,因为修改了 Java 代码之后,还需要手动/自动重新编译代码,随后更新的类才会被重新加载。spring-boot-devtools 真的不是热部署,而是更快的重启方式

自动构建设置

🎶Build project automatically 后面的一行提示,自动编译仅在项目不处于运行,或者处于 Debug 运行中时,才会自动生效,所以通常项目都是以debug方式运行

Spring-dev-tools 总结

如果因为旧项目十分臃肿,导致每次都自动热重启很慢而影响开发效率,笔者建议直接在 POM 移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行手工免启动快速更新!!

IDEA 热部署

如果使用 IDEA 工具,完全可以去掉 spring-boot-devtools 依赖,IDEA 提供了 HotSwap 插件,可以实现真正的热部署,如下图所示:

修改代码之后,仍然需要重新编译代码后代码才可以被热交换,以上方式必须以debug模式启动项目才会生效

总结

如果想要完成 Spring Boot 项目的热加载,完全不需要任何依赖,使用 IDEA 自带的更新策略即可,如下图,随后以 DEBUG 方式运行项目就可以做到热加载了

附录

APP 冷启动和热启动的区别

IDEA + Spring Boot 的三种热加载方案,看完弄懂,不用加班~

SpringBoot 在 IDEA 中实现热部署(实用版)