SpringBoot 配置热部署
半塘 2024/1/25 SpringBoot 框架
当在开发项目时,修改了代码,每次都需要重启的话,很费时间,所以需要热部署来提高我们的开发效率。
# 1、热部署与热加载
- 热部署
- 服务器运行过程中,不停机直接重新部署项目。
- 热部署是重新加载整个应用,也就意味着内存都会被释放,比热加载干净,也更费时间。
- 热加载
- 服务器运行中重写加载class类,也就是不重启就再次编译加载。
- 热加载依赖于Java类加载机制。内存不释放,速度快。
- 热加载针对的是单个字节码文件,指的是重新编译后,不需要停机,应用程序就可以加载使用新的class文件。
热部署和热加载配置方式
- 热部署:配置devtools方式、JRebel插件方式。
- 热加载:JRebel插件方式。(推荐,一般不需要热部署重启,对单个文件进行更新即可)
热部署和热加载配合使用,能不需要每次修改代码都重写启动,提高开发效率。
# 2、devtools实现热部署
spring-boot-devtools(简称devtools)是SpringBoot团队提供的热部署插件。
# 2.1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 可以防止将devtools依赖传递到其他模块中 -->
<version>3.2.1</version>
</dependency>
1
2
3
4
5
6
2
3
4
5
6
# 2.2、IDEA配置
不配置,手动触发重启更新,快捷键(Ctrl+F9)
IDEA开启运行时编译,自动重启更新
# 2.3、application.yml配置
spring:
devtools:
restart:
enabled: true #设置开启热部署
additional-paths: src/main/java #重启目录
exclude: WEB-INF/**
1
2
3
4
5
6
2
3
4
5
6
devtools本身基于重启方式,不是真正的热替换方案,推荐还是JRebel热加载好。
# 3、JRebel插件实现热部署
JRebel本身是收费的,这里提供一种使用方式。
# 3.1、安装JRebel插件
安装插件Jrebel and XRebel
可以看到插件其实包含了JRebel和XRebel两个部分。
- Jrebel:用于热部署、热加载,更新速度快,生效速度快。
- XRebel:用于显示接口访问速度和访问期间sql的拦截,监控,sql执行时间统计,展示。
# 3.2、配置Jrebel注册码
配置Jrebel注册码参考图
还有一种方式
- 生成GUID (opens new window)
- 拼接GUID:
https://jrebel.qekang.com/95f3b3f5-cf5d-43c2-bd8a-07d3b1a8e1d0
邮箱随便配置即可
# 3.3、使用方式
启动
修改代码热加载
修改代码后,直接快捷键:Ctrl+Shift+F9
,热加载编译当前文件。
- 修改热部署生效时间
如果改为1s的话,修改代码后马上就生效了,不想立即生效的话,可以将时间修改长一点,然后快捷键方式单个文件热加载编译。
# 3.4、MyBatis-Plus热加载补充
- MyBatis-Plus的XML文件使用JRebel热加载时会失败,需要重启,是因为MyBatis-Plus重写了MyBatis的一些方法,可以自己网上查查原因,这里不细说。
- 解决方式:安装
JRebel MybatisPlus extension
插件。
安装JRebel MybatisPlus extension
插件