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)

3. 测试

推荐文章