Bootstrap

SpringBoot热部署重启关闭(DevTools)

一、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

在这里插入图片描述

– 求知若饥,虚心若愚。

;