欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 开发工具的使用

程序员文章站 2022-05-20 09:39:30
...

Spring Boot 提供了一套额外的工具,可以提升应用程序开发的体验,只用在项目中包含 spring-boot-devtools 模块就行。该模块会在开发模式下设置一些默认的属性,例如:禁用缓存、设置日志等级;还会监听 classpath 的变化,自动的重启应用。
spring-boot-devtools 给开发带来了很多的便利,这篇文章总结可它的一些用法。

添加模块依赖

要使用 devtools,需要先添加模块依赖,Maven 和 Gradle 的配置如下:

Maven:

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

Gradle:

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

运行完整打包的应用时,开发工具会被禁用。当使用 java -jar 或者特殊的类加载器运行时,会被认为是生产环境。在 Maven 中使用 <optional>true</optional> 标记该依赖时可选的,或者在 Gradle 中使用自定义的 developmentOnly 配置可以防止开发工具应用到项目的其他模块。

默认配置

Spring Boot 中的一些库会通过缓存来提升性能。比如:模块引擎缓存已编译的模板,已避免重复解析模板文件;Spring MVC 在响应静态资源时设置 HTTP 缓存头。
启用缓存在开发环境中非常有用,但是在生产环境下却适得其反。因此 spring-boot-devtools 默认会为我们禁用掉缓存,而不用再去手动禁用了。
同时,开发工具还会将 Web 日志的等级设置为 DEBUG,这样就可以看到更加详细的请求和响应信息。如果要记录所有请求详细信息(包括可能的敏感信息),可以启用 spring.http.log-request-details
如果不想使用默认的配置,可以设置 spring.devtools.add-propertiesfalse

自动重启

当 classpath 上的文件发生修改时,使用了 spring-boot-devtools 的应用会自动重启。在开发过程中,会是一个有用的功能,因为可以快速地看到修改导致的变化。
由于 DevTools 监视 classpath 资源,因此触发重新启动的唯一方法是更新 classpath。在 Eclipse 中,默认在修改文件并保存时会自动编译,从而触发 classpath 更新,而 IntelliJ 中需要手动构建项目(Build -> Build Project)才行。当然,IntelliJ 中也可以设置自动编译,但我觉得没有必要。

Devtools 通过两个类加载器来完成重启,对于第三方库等不会发生修改的类,使用 base 类加载器,用户编辑的类则使用 restart 类加载器。当应用重启时,restart 类加载器会被丢弃然后创建一个新的,这样会加快重启的速度。如果觉得重启不够快,可以考虑使用 JRebel,它通过重新载入类来实现热更新。

输出条件评估的变化

默认情况下,每次应用程序重新启动时,都会输出条件评估增量的报告。该报告显示了修改应用程序时自动配置的变化,例如:添加或删除 Bean 以及配置属性。

添加下面的配置可以关闭该日志:

spring.devtools.restart.log-condition-evaluation-delta=false

排除资源

某些资源在更改时不需要触发重启。默认情况下,/META-INF/maven/META-INF/resources/resources, /static/public/templates 中的资源发生修改时不会触发重启(但是会触发 live reload,见下文)。
如果想要自定义需要排除的目录,可以通过 spring.devtools.restart.exclude 属性配置(逗号分隔多个)。如果想要维持默认的配置额外的排除其他目录,可以通过 spring.devtools.restart.additional-exclude 属性配置。

监听其他路径

通过 spring.devtools.restart.additional-paths 可以配置额外的路径以监听变化。

禁用重启

如果不想使用重启功能,可以通过 spring.devtools.restart.enabled 属性设置。大多数情况下,直接在 application.properties 中设置即可。如果想要完全禁用重启,需要在调用 SpringApplication.run(…) 之前设置 spring.devtools.restart.enabled System 属性为 false

public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}

使用触发文件

如果使用不断编译已更改文件的 IDE,可能更喜欢仅在特定时间触发重新启动。我们可以使用“触发器文件”,这是一个特殊文件,当想要实际触发重新启动检查时必须修改该文件。更改文件只会触发检查,只有在 Devtools 检测到必须执行某些操作时才会重新启动。触发器文件可以手动更新,也可以使用 IDE 插件更新。
spring.devtools.restart.trigger-file 属性设为触发文件路径。

LiveReload

spring-boot-devtools模块包含一个嵌入式 LiveReload 服务器,可用于在资源更改时触发浏览器刷新。浏览器需要安装 LiveReload 插件

如果不想启用 LiveReload 服务器,设置 spring.devtools.livereload.enabled 属性为 false

一次只能运行一个 LiveReload 服务器。如果从 IDE 启动多个应用程序,则只有第一个具有 LiveReload 功能。

全局配置

$HOME 目录下创建一个 .spring-boot-devtools.properties 文件,在里面添加全局的 devtools 设置。添加到此文件的任何属性都会应用到本机所有使用 devtools 的 Spring Boot 应用程序中。

参考链接

  1. Developer Tools