SpringBoot教程-Spring Boot 开发工具
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 提供以下特性:
- 属性默认值
- 自动重启
- LiveReload(自动刷新)
- 远程调试隧道
- 远程更新和重启
属性默认值:Spring Boot 提供了模板技术 Thymeleaf,其中包含属性 spring.thymeleaf.cache。它禁用了缓存,允许我们在不需要重启应用程序的情况下更新页面。但是在开发过程中设置这些属性总是会导致一些问题。
当我们使用 spring-boot-devtools 模块时,无需设置这些属性。在开发期间,自动禁用了 Thymeleaf、Freemarker、Groovy Templates 的缓存。
注意:如果不想在应用程序中应用属性默认值,可以在 application.properties 文件中将 configprop:spring.devtools.add-properties[] 设置为 false。
自动重启:自动重启是指重新加载 Java 类并在服务器端配置它。在服务器端发生更改后,动态部署并重新启动加载修改后的代码。它在大多数基于微服务的应用程序中使用。Spring Boot 使用两种类型的类加载器:
- 不会发生更改的类(第三方 Jar)在基本类加载器中加载。
- 我们正在积极开发的类在重启类加载器中加载。
当应用程序重新启动时,重新启动类加载器被丢弃,然后填充新的类加载器。因此,基本类加载器始终可用且填充。
我们可以通过使用属性 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 部分看到以下目录。
步骤7:打开 SpringBootDevtoolsExampleApplication.java 并将其运行为 Java Application。
之后,对应用程序进行任何更改(编辑或删除一些文件或代码),并保存这些更改。一旦保存更改,服务器会重新启动并加载修改后的内容。
Spring Boot DevTools
以上为完整的 Spring Boot DevTools 示例。通过使用 DevTools,我们可以在开发过程中提高效率,实时监测并应用更改,从而更快地开发和调试应用程序。 DevTools 是 Spring Boot 提供的强大开发工具,可帮助我们在开发阶段更轻松地进行应用程序的开发和测试。