首发于小西学JAVA

SpringBoot系列:spring-boot-devtools模块

spring-boot-devtools是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")
}

默认属性

有些SpringBoot支持的库使用了缓存技术来提高性能。比如模板引擎会对编译好的模板进行缓存从而避免每次都要解析模板文件;Spring MVC也会为静态文件缓存一些Http的Header属性。

虽然在生产环境下面缓存能够极大地提高程序的性能,但是在开发阶段并不是很友好,所以spring-boot-devtools默认会禁用这些缓存。比如spring-boot-devtools会通过spring.thymeleaf.cache属性来禁用Thymeleaf的缓存。

自动重启

当我们使用IDE(例如Eclipse、IDEA等)开发SpringBoot项目时,当spring-boot-devtools检测到项目类路径下面有变化时会自动重启项目。

当然spring-boot-devtools对此作了优化,它创建了两个classloader,一个base classloader用来加载那些依赖的第三方库的类,而项目中正在开发的类会被另一个restart classloader加载,这样每次项目重启,其实是重新创建一个新的restart classloader来加载项目中产生的类文件,因此比一般的项目启动会快很多。

LiveRecord支持

spring-boot-devtools内部集成了一个Live Record的服务,只要前端浏览器(例如Chrome, Firefox and Safari等)安装了Live Record插件,前端页面的修改就能够自动刷新到浏览器,这样对前端开发也是很友好的。

全局设置

spring-boot-devtools支持全局设置功能,默认位于$HOME/.config/spring-boot这个目录下的以下配置文件会被自动加载并且应用于这台机器上运行的所有SpringBoot项目($HOME表示当前用户的Home目录):

  1. spring-boot-devtools.properties
  2. spring-boot-devtools.yaml
  3. spring-boot-devtools.yml

远程调试支持

如果我们想开启SpringBoot项目的远程调试功能,需要在应用打包的时候把spring-boot-devtools一起打包进去(默认spring-boot-devtools是不会被一起打包的,它只是开发期间的一个辅助包),比如Maven项目,我们可以这样设置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

启动本地应用的时候,需要选择main class为
org.springframework.boot.devtools.RemoteSpringApplication并且设置Program Arguments为ip:port(远程服务的地址)

注意点

spring-boot-devtools是基于shutdown钩子,应此不能将其设置为false(SpringApplication.setRegisterShutdownHook(false))

参考文章

docs.spring.io/spring-b

发布于 2022-01-21 18:49