Spring Boot热部署
发布于 2022年 05月 19日 18:27
1. 什么是热部署?
热部署就是在应用正在运行的时候升级应用(增加业务或修改bug),却不需要重新启动应用。热部署监听class文件,如果class文件改动了,就会创建一个新的ClassLoader进行加载该文件,Spring Boot通过配置DevTools 工具来实现热部署。
原理上是使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方jar包),另一个ClassLoader加载会更改的类,称为restart CLassLoader,这样在代码有改动的时候,原来的restart ClassLoader会被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相对较少,所以启动时间很快。
2. 配置热部署
2.1 导入jar包
<!-- devTools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true, 依赖不会传递, 该项目依赖devtools;
之后依赖boot项目的项目如果想要使用devtools, 需要重新引入 -->
<optional>true</optional>
</dependency>
<!-- 插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<!-- 如果没有该配置,热部署的devtools不生效 -->
<fork>true</fork>
</configuration>
</plugin>
2.2 在properties中添加配置
#热部署生效
spring.devtools.restart.enabled=true
# 设置重启的目录,添加目录的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
# 解决项目自动重新编译后接口报404的问题
spring.devtools.restart.poll-interval=3000
spring.devtools.restart.quiet-period=1000
2.3 修改idea配置
-
开启自动编译(勾选 File --> Settings --> Compiler --> Build Project automatically)
-
Registry 属性修改(快捷键 ctrl + shift + alt + / --> 选择Registry --> 勾选Compiler autoMake allow when app running)