Spring Boot DevTools 是 Spring Boot 1.3 提供的另一个模块。DevTools 代表开发者工具。该模块的目标是在使用 Spring Boot 应用程序时改进开发时间。Spring Boot DevTools 可以检测到代码变化并自动重启应用程序。

我们可以通过在 pom.xml 文件中添加以下依赖项来实现 DevTools。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId>  
    <scope>runtime</scope>  
</dependency>  

Spring Boot DevTools 特性

Spring Boot DevTools 提供以下特性:

  1. 属性默认值
  2. 自动重启
  3. LiveReload(自动刷新)
  4. 远程调试隧道
  5. 远程更新和重启

属性默认值:Spring Boot 提供了模板技术 Thymeleaf,其中包含属性 spring.thymeleaf.cache。它禁用了缓存,允许我们在不需要重启应用程序的情况下更新页面。但是在开发过程中设置这些属性总是会导致一些问题。

当我们使用 spring-boot-devtools 模块时,无需设置这些属性。在开发期间,自动禁用了 Thymeleaf、Freemarker、Groovy Templates 的缓存。

注意:如果不想在应用程序中应用属性默认值,可以在 application.properties 文件中将 configprop:spring.devtools.add-properties[] 设置为 false。

自动重启:自动重启是指重新加载 Java 类并在服务器端配置它。在服务器端发生更改后,动态部署并重新启动加载修改后的代码。它在大多数基于微服务的应用程序中使用。Spring Boot 使用两种类型的类加载器:

  1. 不会发生更改的类(第三方 Jar)在基本类加载器中加载。
  2. 我们正在积极开发的类在重启类加载器中加载。

当应用程序重新启动时,重新启动类加载器被丢弃,然后填充新的类加载器。因此,基本类加载器始终可用且填充。

我们可以通过使用属性 spring.devtools.restart.enabled 设置为 false 来禁用服务器的自动重启。

记住:

  • DevTools 始终监视类路径资源。
  • 触发重新启动的唯一方式是更新类路径。
  • DevTools 需要一个单独的应用程序类加载器来正常工作。默认情况下,Maven fork 应用程序进程。
  • 自动重启与 LiveReload 配合使用效果很好。
  • DevTools 依赖于应用程序上下文的关闭钩子,以便在重新启动期间关闭它。

LiveReload(自动刷新):Spring Boot DevTools 模块包含一个名为 LiveReload 的嵌入式服务器。它允许在我们对资源进行更改时自动触发浏览器刷新。也称为自动刷新。

注意:我们可以通过将属性 spring.devtools.livereload.enabled 设置为 false 来禁用 LiveReload。

它为 Chrome、Firefox 和 Safari 提供浏览器扩展。默认情况下,LiveReload 是启用的。LiveReload 适用于以下路径:

  • /META-INF/maven
  • /META-INF/resources
  • /resources
  • /static
  • /public
  • /templates

我们也可以通过排除上述路径来禁用浏览器的自动刷新。例如:

spring.devtools.restart.exclude=public/**, static/**, templates/**

我们可以使用属性 spring.devtools.restart.additional-paths 来查看其他附加路径。例如:

spring.devtools.restart.additional-paths=/path-to-folder

如果想要排除其他附加路径并保持默认设置,则使用属性 spring.devtools.restart.additional-exclude。例如:

spring.devtools.restart.additional-exclude=styles/**

记住:

  • 一次只能运行一个 LiveReload 服务器。
  • 在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。
  • 如果从 IDE 启动多个应用程序,则只支持第一个 LiveReload。

远程调试隧道:Spring Boot 可以将 JDWP(Java Debug Wire Protocol)隧道直接通过 HTTP 隧道传递给应用程序。它甚至可以在应用程序部署到只公开端口 80 和 443 的云提供商时运行。

远程更新和重启:DevTools 提供的另一个技巧是支持远程应用程序更新和重启。它监视本地类路径的文件更改并将它们推送到远程服务器,然后重新启动该服务器。我们还可以将此功能与 LiveReload 结合使用。

使用触发文件

自动重启有时会由于频繁重启而减慢开发时间。为了解决这个问题,我们可以使用触发文件。Spring Boot 监视触发文件并检测其中的修改。它重新启动服务器并重新加载所有以前的更改。

我们可以通过添加属性 spring.devtools.restart.trigger-file 来在应用程序中实现触发文件。文件可以是内部或外部的。例如:

spring.devtools.restart.trigger-file=c:/workspace-sts-3.9.9.RELEASE/restart-trigger.txt

Spring Boot DevTools 示例

步骤1:使用 Spring Initializr https://start.spring.io/ 创建一个 Maven 项目。

步骤2:提供 Group 名称和 Artifact Id。我们提供了 Group 名称 cn.javatiku 和 Artifact Id spring-boot-devtools-example。

步骤3:添加以下依赖项:spring-boot-starter-web 和 spring-boot-devtools。

步骤4:点击 Generate 按钮。它会下载项目的 Jar 文件。

步骤5:解压下载的 Jar 文件。

步骤6:将文件夹导入到 STS。导入需要一些时间。

文件 -> 导入 -> 选择“Existing Maven Projects” -> 浏览 -> 选择文件夹 spring-boot-devtools-example -> 完成

当项目成功导入后,我们可以在 STS 的 Package Explorer 部分看到以下目录。

f540e8ac4cbd578f5fca55c1efa025d.png

步骤7:打开 SpringBootDevtoolsExampleApplication.java 并将其运行为 Java Application。

之后,对应用程序进行任何更改(编辑或删除一些文件或代码),并保存这些更改。一旦保存更改,服务器会重新启动并加载修改后的内容。

Spring Boot DevTools

以上为完整的 Spring Boot DevTools 示例。通过使用 DevTools,我们可以在开发过程中提高效率,实时监测并应用更改,从而更快地开发和调试应用程序。 DevTools 是 Spring Boot 提供的强大开发工具,可帮助我们在开发阶段更轻松地进行应用程序的开发和测试。
5a55ffcab20eee05ad0e075005bc1d2.png

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术