您现在的位置是:首页 >学无止境 >SpringBoot项目实现热部署网站首页学无止境
SpringBoot项目实现热部署
SpringBoot实现热部署
-
什么是热部署?
所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。
-
热部署有什么用?
- 节约时间,热部署只需要重新更新一下改动过的class文件,不需要全部再编译一遍
- 提高开发效率,热部署对于静态资源能够实现实时更新,不需要再重启项目
手动开启热部署
之前在SSM中我们热部署,是通过勾选两个选项就实现了:
而在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)
这样就不需要重启项目了
知识拓展:重启和重载
- 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
- 重载(ReLoad):jar包,加载位置base类加载器
重新运行项目也就是重启项目包括了Restart过程和ReLoad过程,而热部署只包含Restart过程,所以热部署要比重启要快得多
自动开启热部署
前面我们学习了手动开启热部署,每次都需要手动点击,这显得很麻烦,这里我们将学习如何让IDEA自动启动热部署(也就是定时热部署,一般是鼠标停止五秒中就会热部署一次)
注意:自动开启热部署,也是需要引入热部署依赖的
-
Step1:勾选自动构建项目
-
Step2:勾选热部署配置项
温馨提示:如果使用的是IDEA 2021.2之前版本的话还是使用快捷键
Shift+Ctrl+Alt+/
,选择Registry...
,将compiler.automake.allow.when.app.running
选项勾上(这里我使用的是2022版的IDEA,与2021版IDEA的配置不同)注意:汉化后的IDEA这个选项的位置发生了变化
-
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运维篇学习笔记