一、DevTools依赖
1、DevTools简介
在Spring Boot项目中,spring-boot-devtools模块提供了多种开发时的便利功能,其中最显著的是restart和livereload特性,它们分别用于应用代码的热重启和前端资源的即时重载。
devtools依赖:
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
1.1 Restart 特性
spring-boot-devtools中的restart特性允许Spring Boot应用在检测到代码或配置文件发生变化时自动重启,从而避免了手动重启应用的麻烦。这在开发阶段可以极大地提高迭代速度,因为开发者可以立即看到代码变更的效果。
配置参数如下:
- spring.devtools.restart.enabled: 控制是否开启restart功能,默认为true。
- spring.devtools.restart.additional-paths: 指定除了默认的class path之外,还需要监视的额外文件夹路径。
- spring.devtools.restart.additional-excludes: 指定不应该被监视的额外路径,即使这些路径在additional-paths中被指定。
- spring.devtools.restart.exclude: 指定不被监视的文件或目录模式,例如**/*.properties可以排除所有属性文件。
1.2 LiveReload 特性
livereload特性主要针对前端资源如HTML、CSS和JavaScript文件,当这些文件发生更改时,浏览器会自动刷新页面,无需手动刷新。
配置参数如下:
- spring.devtools.livereload.enabled: 控制是否开启LiveReload功能,默认为true。
- spring.devtools.livereload.port: LiveReload服务器监听的端口,默认为35729。
spring-boot-devtools的restart和livereload特性通过自动化重启和资源重载,极大地提升了开发效率,特别是在频繁修改代码和前端资源的情况下。然而,这些特性通常只在开发环境中使用,生产环境应禁用以避免不必要的重启和安全风险。
二、关闭热部署重启配置
devtools模块的 restart和 livereload特性默认都是开启状态。
如果关闭热部署热部署重启,我们需要在 applicaton.yml文件中关闭它。
spring:
# devtools模块配置
devtools:
restart:
# 热部署开关
enabled: false
livereload:
enabled: false
关闭热部署重启之后,我们发现热部署重启还是生效的。这时,我们需要重点注意这个弹框提示。并在IDEA做额外配置。
三、彻底关闭热部署重启流程
1、为什么会出现这个提示?
IDEA(IntelliJ IDEA)在Debug模式下,当你修改了源代码并重新编译后,如果检测到类文件发生了变化,它可能会弹出提示“Some classes have been changed, Reload changed classes now?”。这个提示是IDEA的热加载(HotSwap)功能的一部分,用于询问你是否希望立即重新加载这些更改的类文件,以便在不重启Debug会话的情况下查看更改的效果。
- 热加载(HotSwap)功能:IDEA支持在Debug模式下对正在运行的Java应用程序进行类文件的热更新。当你修改了源代码并重新编译后,IDEA会检测到这些变化,并询问你是否希望将这些更改应用到正在运行的程序上。
- 默认设置:IDEA的默认设置可能会在某些情况下自动弹出这个提示,尤其是当你第一次在Debug模式下修改并重新编译类文件时。
2、如何取消这个提示?
如果你不希望每次修改类文件后都看到这个提示,可以在 IDEA的 settings 中 调整HotSwap设置来取消它。
打开IDEA的设置(Preferences/Settings > Build, Execution, Deployment > Debugger > HotSwap)。
可以找到 Reload classes after compilation这一选项,并根据你的需求选择Always、Never或Ask(默认)。
- Never:将阻止IDEA在编译后自动弹出重新加载类的提示。但请注意,这样做可能会阻止你查看对正在运行的Debug会话所做的更改。
- Always:将自动重新加载更改的类,而不会弹出提示。
- Ask(默认):将保留当前的默认行为,即每次编译后都会询问你是否希望重新加载类。
如果项目源代码更改之后,不需要自动重新加载更改的类,而是手动重启项目。所以你就可以勾选 Never。
3、彻底关闭热部署重启配置
项目中依赖了 devtools模块,但是我想彻底关闭它的热部署重启,简单两步即可。
(1)关闭热部署重启配置
spring:
# devtools模块配置
devtools:
restart:
# 热部署开关
enabled: false
livereload:
enabled: false
(2)HotSwap设置为 Never
– 求知若饥,虚心若愚。