> 文章列表 > SpringBoot项目实现热部署

SpringBoot项目实现热部署

SpringBoot项目实现热部署

文章目录

  • SpringBoot实现热部署
      • 手动开启热部署
      • 自动开启热部署
      • 热部署相关配置

SpringBoot实现热部署

  • 什么是热部署

    所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件

  • 热部署有什么用

    1. 节约时间,热部署只需要重新更新一下改动过的class文件,不需要全部再编译一遍
    2. 提高开发效率,热部署对于静态资源能够实现实时更新,不需要再重启项目

手动开启热部署

之前在SSM中我们热部署,是通过勾选两个选项就实现了:
SpringBoot项目实现热部署

而在SpringBoot首先我们需要通过热部署依赖实现热部署:(Step1

        <!--热部署依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--  配置插件,让热部署依赖spring-boot-devtools生效备注:一般这个插件在我们创建SpringBoot项目时就自带了,不需要手动引入,所以我们只需要导入热部署依赖就行了--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 设置为true,让热部署devtools生效 --><fork>true</fork><addResources>true</addResources></configuration></plugin>

然后每次当我们修改了代码(Step2)后,我们需要点击构建项目:(Step3
SpringBoot项目实现热部署

这样就不需要重启项目了

知识拓展:重启和重载

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
  • 重载(ReLoad):jar包,加载位置base类加载器

重新运行项目也就是重启项目包括了Restart过程和ReLoad过程,而热部署只包含Restart过程,所以热部署要比重启要快得多

自动开启热部署

前面我们学习了手动开启热部署,每次都需要手动点击,这显得很麻烦,这里我们将学习如何让IDEA自动启动热部署(也就是定时热部署,一般是鼠标停止五秒中就会热部署一次)
注意:自动开启热部署,也是需要引入热部署依赖的

  • Step1:勾选自动构建项目
    SpringBoot项目实现热部署

  • Step2:勾选热部署配置项

    温馨提示:如果使用的是IDEA 2021.2之前版本的话还是使用快捷键Shift+Ctrl+Alt+/,选择Registry...,将compiler.automake.allow.when.app.running选项勾上(这里我使用的是2022版的IDEA,与2021版IDEA的配置不同)

    SpringBoot项目实现热部署

    注意:汉化后的IDEA这个选项的位置发生了变化

    SpringBoot项目实现热部署

  • Step3

    IDEA鼠标悬停5秒不动,IDEA就会自动开启热部署

热部署相关配置

通过修改项目中的文件,你可以发现其实并不是所有的文件修改都会激活热部署的,原因在于在开发者工具中有一组配置,当满足了配置中的条件后,才会启动热部署,配置中默认不参与热部署的目录信息如下:

  • /META-INF/maven
  • /META-INF/resources
  • /resources
  • /static
  • /public
  • /templates

以上目录中的文件如果发生变化,是不参与热部署的。如果想修改配置,可以通过application.yml文件进行设定哪些文件不参与热部署操作,如果想添加不参与热部署的文件或文件夹,可以通过下面的配置:

spring:devtools:restart:# 设置不参与热部署的文件或文件夹exclude: static/**,public/**,config/application.yml# 关闭或开启热部署(false表示关闭)enable: false

知识拓展: 配置文件优先级

在resource下的配置文件中选择关闭热部署,可以会在其它地方打开,比如在 resource/config/ 下的配置文件中开启了热部署,又或者在file下的配置文件,又或者是file下config下的配置文件中开启了热部署,这是由于其它三个配置文件的优先级要高于resource下的配置文件,我们可以通过设置临时属性来提高优先级,也可以通过设置Java系统属性值,相关知识详情可以参考:SpringBoot运维篇学习笔记
SpringBoot项目实现热部署