文章目录

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


SpringBoot实现热部署

  • 什么是热部署

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

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

手动开启热部署

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

Java热部署devtools java热部署sping boot_Java热部署devtools

而在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

Java热部署devtools java热部署sping boot_spring boot_02

这样就不需要重启项目了

知识拓展:重启和重载

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

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

自动开启热部署

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

  • Step1:勾选自动构建项目
  • Java热部署devtools java热部署sping boot_mybatis_03

  • Step2:勾选热部署配置项

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


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

Java热部署devtools java热部署sping boot_mybatis_04

  • 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系统属性值

Java热部署devtools java热部署sping boot_热部署_05