springboot-dev-tools

springboot-dev-tools

Springboot开发者工具

Spring Boot 包含一组额外的工具,可以使应用程序开发体验更加愉快。 spring-boot-devtools 模块可以包含在任何项目中,以提供额外的开发时功能。 要包含 devtools 支持,请将模块依赖项添加到您的构建中,如以下 Maven 和 Gradle 清单所示:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

运行完全打包的应用程序时,devtools会自动禁用

如果程序是从 java -jar或者如果它是从一个特殊的类加载器启动的,那么它被认为是一个“生产应用程序”

可以使用yml配置spring.devtools.restart.enabled属性启用 devtools,

无论用于启动应用程序的类加载器如何,请设置-Dspring.devtools.restart.enabled=true系统属性

不能在存在安全风险的生产环境运行devtools

要禁用 devtools,请排除依赖项或设置-Dspring.devtools.restart.enabled=false系统属性。

在 Maven 中将依赖项标记为<optional>true</optional>或Gradle中的配置使用developmentOnly可防止 devtools 被传递地应用于使用您项目的其他模块。

默认情况下,重新打包的 archives 不包含devtools。如果要使用某个远程devtools功能,则需要将其包括在内

使用Maven插件时,将excludeDevtools属性设置为false。使用Gradle插件时,将任务的类路径配置为包含developmentOnly配置。

属性默认值

Spring Boot 支持的几个库使用缓存来提高性能。 例如, 模板引擎 缓存已编译的模板以避免重复解析模板文件。 此外,Spring MVC 可以在提供静态资源时向响应添加 HTTP 缓存标头。

虽然缓存在生产中非常有益,但在开发过程中可能会适得其反,使您无法看到刚刚在应用程序中所做的更改。 出于这个原因, spring-boot-devtools 默认禁用缓存选项。

缓存选项通常由您的 application.properties文件。 例如,Thymeleaf 提供 spring.thymeleaf.cache财产。 无需手动设置这些属性, spring-boot-devtools模块自动应用合理的开发时配置。

由于您在开发 Spring MVC 和 Spring WebFlux 应用程序时需要更多有关 Web 请求的信息,因此开发人员工具将启用 DEBUG日志记录 web日志组。 这将为您提供有关传入请求、正在处理它的处理程序、响应结果等的信息。 如果您希望记录所有请求详细信息(包括潜在的敏感信息),您可以打开 spring.mvc.log-request-details或者 spring.codec.log-request-details配置属性。

如果您不想应用属性默认值,您可以设置 spring.devtools.add-properties到 false在你的 application.properties. 

  	有关由 devtools 应用的属性的完整列表,请参阅 [DevToolsPropertyDefaultsPostProcessor](https://github.com/spring-projects/spring-boot/tree/v2.4.9/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java) 。 

自动重启

实时重载

全局设置

远程应用程序

devtools默认会禁用Springboot的缓存

如果不想使用默认值可以在application配置文件中添加spring.devtools.add-properties=false

设置自动重启

devtools

因为 DevTools 会监控类路径资源,触发重启的唯一方法是更新类路径

更新类路径的方式取决于你使用的IDE开发工具

在 Eclipse 中,保存修改后的文件会导致更新类路径并触发重新启动

在 IntelliJ IDEA 中,构建项目( Build -> Build Project) 具有相同的效果。

排除资源

一些资源在更改的时候不一定需要触发重启 eg: 可以随时编辑的thymeleaf模板

默认情况下,更改资源 /META-INF/maven, /META-INF/resources, /resources, /static, /public/templates 时不会触发重新启动,但是会触发重新加载 如果要自定义排除这些选项,可以使用spring.devtools.restart.exclude来排除

eg: spring.devtools.restart.exclude=static/**,public/** 配置排除了类路径下static与public文件夹下的所有文件

若需要保留默认值,并添加其他排除选项可以使用配置spring.devtools.restart.additional-exclude来代替

监测其他非类路径

可以使用spring.devtools.restart.additional-paths配置检测此路径下文件的改动

参考资料