一、背景介绍

spring-boot-devtools是一个为开发者服务的模块,能够自动实现把更新的代码和配置更改到最新的应用上。其工作原理是:在发现代码或配置有更改后,自动重新启用应用。在devtools运行的时候,应用程序会被加载到java虚拟机中两个独立的类加载器中,一个ClassLoaderr加载Java代码、属性文件以及项目“src/main/”路径下几乎所有的内容,另一个ClassLoader加载依赖的库。当devtools探测到变更时,只会重新加载包含项目代码的类加载器,并重启spring的应用上下文;在这个过程中,另外一个类加载器原封不动。

二、maven的pom文件添加依赖

2.1 添加devtools依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <!-- optional=true,依赖不会往下传递,如果有项目依赖本项目,并且想要使用devtools,需要重新引入 -->
            <optional>true</optional>
            <scope>runtime</scope>
</dependency>

2.2 修改build属性中插件配置

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 如果没有该项配置,devtools不会起作用,即应用不会restart -->
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
</build>

如果是Eclipse,配置到这里,那么只要重启服务,热部署就会生效了。但是,IDEA热部署还不会生效,因为devTools只会在类路径上的文件发生更改时才会自动重启,而IDEA默认不会自动编译。

三、Idea编辑器处理方法

第一步:开启自动编译。

按照preference->Build,Execution,Deployment->compiler路径,打开compiler配置面板,选中“Build project automatically”。如图:

Springboot在idea中使用devtools热部署配置不生效的解决方法_spring

第二步:按Ctrl+Shift+Alt+/快捷键,选择Registry条目,如下图

Springboot在idea中使用devtools热部署配置不生效的解决方法_热部署_02

第三步:在第二步弹出的选相框中,勾选 compiler.automake.allow.when.app.running,如下图:

Springboot在idea中使用devtools热部署配置不生效的解决方法_热部署_03

至此,Springboot在idea中使用devtools热部署配置就生效了。



解决idea2021.3 配置dev-tools不生效问题

dev-tools 是SpringBoot提供的一个可以热部署的插件,只要监测到我们的程序中有代码发生了变动,就会重启编译部署,无需重新启动,提升开发效率。

由于idea2021.3的配置和之前版本的有些不同 ,这里记录一下新的方式。

1.引入依赖和插件

首先我们需要在pom.xml文件中引入依赖和插件。

<!-- 引入DevTools热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

配置插件:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- devtools依赖此配置(否则,devtools不生效)。 -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

2. 配置文件开启

然后需要在SpringBoot配置文件中开启热部署功能

spring:
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java  # 监测的代码目录
 

3. Idea配置修改

首先在idea的设置中,需要勾选几个选项:

File - Setttings - Complier

Springboot在idea中使用devtools热部署配置不生效的解决方法_重启_04

同时在Advanced Settings 中也要处理

Springboot在idea中使用devtools热部署配置不生效的解决方法_spring_05

确保上述几个都是开启的。

然后在运行配置中也要修改:

Springboot在idea中使用devtools热部署配置不生效的解决方法_重启_06

更改一下更新的动作:

Springboot在idea中使用devtools热部署配置不生效的解决方法_热部署_07

都配置好了以后,可以先试一下,第一次运行要重新编译,打包,执行。如果不生效可以重启一次idea, 一般来讲重启后都可以生效。