Spring Boot DevTools是一组用于提高开发人员生产力,并加速Spring Boot应用程序开发的工具。它提供了一些功能,可以帮助开发人员更快速地构建应用程序,并减少常见的开发问题。
Spring Boot DevTools的主要作用包括:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
现在,当您在应用程序的代码中进行更改时,DevTools将自动重新加载应用程序,而无需手动重新启动服务器。您还可以使用DevTools提供的实时监控和日志管理功能来监视应用程序的状态和性能,并快速定位和解决问题。
Spring Boot DevTools 提供了实时监控功能,这对于开发和调试应用程序来说非常有用。下面我将介绍如何使用 DevTools 的实时监控功能。
DevTools 的一个重要特性是自动重启。当你对代码做出更改并保存时,应用会自动重启,这使得改动能够快速生效。
以下是一个示例流程:
启动应用程序: 使用 IDE 或命令行启动你的 Spring Boot 应用。
修改代码: 当应用运行时,尝试更改一些代码。例如,修改一个控制器的返回值。
自动重启: 保存更改后,DevTools 将检测到这些更改并自动重新启动应用程序。这意味着你无需手动停止和重新启动服务器。
查看更改: 在浏览器或测试工具中重新请求你更改的端点,你应该能看到新的更改已经生效。
DevTools 不仅可以监控 Java 文件的更改,还可以监控静态资源(如 HTML、CSS、JavaScript 文件)和视图模板的更改。对这些资源的更改通常无需重启应用程序,DevTools 会自动应用这些更改。
除了自动重启,DevTools 还提供了其他实用的实时监控功能,如:
application.properties
或 application.yml
文件中做出的更改可以在不重启应用的情况下自动生效。通过使用 Spring Boot DevTools,你可以显著提高开发效率,实现快速迭代和测试。这些实时监控功能为开发人员提供了即时反馈,有助于快速发现并修复问题,同时也使得实验新想法变得更加容易。
Spring Boot 支持的几个库使用缓存来提高性能。例如,模板引擎缓存编译后的模板,以避免重复解析模板文件。此外,Spring MVC 在提供静态资源时,可以在响应中添加 HTTP 缓存头。
虽然缓存对生产非常有益,但在开发过程中可能会适得其反,导致您无法看到刚刚在应用程序中做出的更改。因此,spring-boot-tools 默认禁用缓存选项。
缓存选项通常通过 application.properties
文件中的设置进行配置。例如,Thymeleaf 提供了 spring.phrine.cache
属性。spring-boot-tools 模块会自动应用合理的开发时配置,而不需要手动设置这些属性。
下表列出了应用的所有属性:
名称 | 默认值 |
---|---|
server.error.include-binding-errors | always |
server.error.include-message | always |
server.error.include-stacktrace | always |
server.servlet.jsp.init-parameters.development | true |
server.servlet.session.persistent | true |
spring.docker.compose.readiness.wait | only-if-started |
spring.freemarker.cache | false |
spring.graphql.graphiql.enabled | true |
spring.groovy.template.cache | false |
spring.h2.console.enabled | true |
spring.mustache.servlet.cache | false |
spring.mvc.log-resolved-exception | true |
spring.reactor.netty.shutdown-quiet-period | 0s |
spring.template.provider.cache | false |
spring.thymeleaf.cache | false |
spring.web.resources.cache.period | 0 |
spring.web.resources.chain.cache | false |
注意:如果你不希望应用属性默认值,可以在 application.properties 中将 spring.devtools.add-properties 设置为 false。
因为在开发 Spring MVC 和 Spring WebFlux 应用程序时需要更多关于 Web 请求的信息,开发人员工具建议您为 Web 日志组启用DEBUG
日志记录。这将为您提供有关传入请求、处理它的处理程序、响应结果和其他详细信息的信息。如果您希望记录所有请求详细信息(包括潜在的敏感信息),您可以打开 spring.mvc.log-request-details
或 spring.codec.log-request-details
配置属性。
spring-boot-tools
模块包含一个嵌入式LiveReload服务器,可以在资源更改时触发浏览器刷新。LiveReload浏览器扩展程序可免费用于Chrome、Firefox和Safari。您可以在所选浏览器的市场或商店中搜索“LiveReload”来找到这些扩展程序。
如果你不想在应用程序运行时启动LiveReload服务器,你可以将spring.tools.livereload.enabled
属性设置为false
。
注:一次只能运行一个 LiveReload 服务器。在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。如果从IDE启动多个应用程序,则只有第一个应用程序具有 LiveReload 支持。
你可以通过这个目录下的文件 $HOME/.config/spring-boot
修改 devtools的全局配置
spring-boot-devtools.properties
spring-boot-devtools.yaml
spring-boot-devtools.yml
添加到这些文件的任何属性都适用于您机器上使用 devtools 的所有 Spring Boot 应用程序
默认情况下,$HOME
是用户的主目录。要自定义此位置,请设置 SPRING_DEVTOOLS_HOME
环境变量或 spring.tools.home
系统属性。
如果在
$HOME/.config/spring-boot
中找不到 devtools 配置文件,则会搜索$HOME
目录的根目录是否存在.spring-boot-devtools.properties
文件。这允许您与不支持$HOME/.config/spring-boot
位置的旧版本 Spring Boot 上的应用程序共享 devtools 全局配置。
DevTools properties/yaml 文件中不支持
Profiles
配置。
Spring Boot DevTools不限于本地开发。您还可以在远程运行应用程序时使用多种功能。
远程支持是可选的,因为启用它可能会带来安全风险。它只应在受信任的网络上运行或使用 SSL 进行保护时启用。如果这两种选项都不可用,则不应使用 DevTools 的远程支持。您永远不应该在生产部署中启用支持。
要启用它,您需要确保 DevTools 包含在重新打包的存档中,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<excludeDevtools>falseexcludeDevtools>
configuration>
plugin>
plugins>
build>
然后,您需要设置 spring.devtools.remote.secret
属性。与任何重要的密码或秘密一样,该值应该是唯一且强壮的,这样它就不能被猜测或暴力破解。
远程开发工具支持分为两部分:接受连接的服务器端端点和在 IDE 中运行的客户端应用程序。设置 spring.devtools.remote.secret
属性时,服务器组件会自动启用。客户端组件必须手动启动。
Spring WebFlux应用程序不支持远程工具。