Spring Boot 中 Developer Tools 的配置和使用

267 阅读2分钟

Developer Tools 是 Spring 提供的一个提高开发效率的工具。

如何使用?

需要在 Spring Boot 项目中添加相关依赖:

Maven 配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Gradle 配置

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

自动重启

DevTools 会监控 classpath 路径中的文件,当这些文件发生变化并且发生某些触发动作时,应用将会被自动重启。

在不同的 IDE 中,这些触发动作是不同的:

  • 在 Eclipse 中,当保存文件时会触发自动重启。
  • 在 IEDA 中,则是在编译时触发(【Build】-->【Build Project】,快捷键 Ctrl + F9)。

在使用 IEDA 时,需要手动编辑时才会触发自动重启,这显然还是不太方便 。

为了避免每次都手动编译,我们可以配置更新策略:

  1. 点击主菜单中的【Run】--> 【Edit Configurations】。
  2. 在弹出的【Run/Debug Configurations】窗口中,选中需要配置的应用。
  3. Running Application Update Policies 下面进行配置:
    1. On 'Update' action -- 配置当”更新“发生时,采取的动作。(备注:我没搞明白这个更新时机是啥,当只配置这一项时,好像不起作用,IDEA版本:2020.4)。
    2. On frame deactivation -- 配置当 IDEA 窗口”失活“(比如切换到浏览器等其他窗口),采取的动作。这一项配置是有效的,我将这一项配置为 ”Update classes and resources“ ,当我改完代码切换到浏览器时,应用会自动重启。

image-20210725193252971.png

作用和原理

DevTools 的主要作用是减少重启的时间,它并不是真正的热加载技术(比如:JRebel)。

DevTools 的基本原理是,将代码分为两部分:不变的部分(比如第三方JAR包)和变化部分。不变的部分(比如第三方JAR包)由 base blassloader 加载,变化的部分由 restart classloader 加载。这样每次重启时,只加载变化的部分,这样就减少了启动的时间。

相关资料

8. Developer Tools

Application update policies