近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
devtools的原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
这里我没有把所有的方式都尝试一遍,只是使用了devtools的方式

总的来说,一共需要两个步骤:

第一步、先设置我们的pom.xml文件,加入依赖

首先是把下面代码在

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <optional>true</optional>
  5. <scope>true</scope>
  6. </dependency>

另外下面的代码是放在 下面里的



org.springframework.boot
spring-boot-maven-plugin


true

第二步、设置IDEA的自动编译:

(1)File-Settings-Compiler勾选 Build Project automatically

IDEA SpringBoot 热部署 - 图1

(2)快捷键 ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

IDEA SpringBoot 热部署 - 图2
IDEA SpringBoot 热部署 - 图3

这样我们的热部署就完成了,可以再我们的项目中修改返回值,或者修改Mapping的value值后,在我们的页面中刷新试试,

我们的修改已经生效了,不用通过再关闭再开启项目查看了。


spring-boot-devtools 介绍

  • spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。
  • spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。
  • 由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。

    配置热部署

  • 在 pom.xml 文件中,添加项目 spring-boot-devtools 依赖 |

    org.springframework.boot
    spring-boot-devtools
    true



    org.springframework.boot
    spring-boot-maven-plugin


    true

    | | —- |

  • 在资源文件 application.properties 中进行热部署的相关配置 | # 页面修改后立即生效,关闭缓存,立即刷新
    spring.thymeleaf.cache=false
    # 热部署生效
    spring.devtools.restart.enabled=true
    # 设置需要重启的目录
    spring.devtools.restart.additional-paths=src/java/main
    # 设置不需要重启的目录
    spring.devtools.restart.exclude=static/,public/,WEB-INF/**
    # 为 mybatis 设置,生产环境可删除
    # restart.include.mapper=/mapper-[\\w-\\.]+jar
    # restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar | | —- |


    当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。

    设置 IDEA 环境自动编译

    在使用 IDEA 编译器时,需要设置自动编译。

  • 在编译器选项中勾选 Build project automatically 选项

  • 使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项

源码地址

springboot-devtools


具体步骤

一、开启IDEA的自动编译(静态)

具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。
IDEA SpringBoot 热部署 - 图4

二、开启IDEA的自动编译(动态)

具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

  • compiler.automake.allow.when.app.running -> 自动编译
  • compile.document.save.trigger.delay -> 自动更新文件

PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!
IDEA SpringBoot 热部署 - 图5

三、开启IDEA的热部署策略(非常重要)

具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。
IDEA SpringBoot 热部署 - 图6
image.png

四、在项目添加热部署插件(可选)

温馨提示:
如果因为旧项目十分臃肿,导致热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行免启动快速更新!!
具体步骤:在POM文件添加热部署插件


org.springframework.boot
spring-boot-devtools
runtime

五、关闭浏览器缓存(重要)

打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。