Spring Boot DevTools

Spring Boot 1.3提供了另一个名为Spring Boot DevTools的模块。 DevTools代表 Developer Tool 。该模块的目的是在使用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模板的开发缓存期间,将自动禁用。

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

自动重启: 自动重启意味着重新加载Java类并在服务器端对其进行配置。服务器端更改后,它会动态部署,服务器会重新启动,并加载修改后的代码。它主要用于基于微服务的应用程序。 Spring Boot使用 两种类型的ClassLoader:

  • 不变的类(三分之二)已加载到基本ClassLoader中。
  • 我们正在积极开发的类已加载到重新启动ClassLoader中。

应用程序重新启动时,重新启动的ClassLoader被丢弃,并填充了一个新的类。因此,基本的ClassLoader始终可用并已填充。

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

记住:

  • DevTools始终监视类路径资源。
  • 触发重启的唯一方法是更新类路径。
  • DevTools需要单独的应用程序类加载器才能正常工作。默认情况下,Maven派生应用程序进程。
  • 自动重新启动与 LiveReload一起很好地工作。
  • DevTools依赖于应用程序上下文的关闭挂钩在重新启动期间将其关闭。

LiveReload: Spring Boot DevTools模块包括一个名为 LiveReload的嵌入式服务器。,只要我们在其中进行更改,该应用程序就可以自动触发浏览器刷新。资源。这也称为 自动刷新。

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

它提供了适用于Chrome,Firefox和Safari的浏览器扩展。默认情况下,启用LiveReload。 LiveReload在以下路径上工作:

  • /META-INF/maven
  • /META-INF/resources
  • /资源
  • /静态
  • /public
  • /模板

我们还可以通过排除上述路径来禁用浏览器中的自动重新加载。例如:

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可以通过HTTP将JDWP(Java调试线协议)直接隧道到应用程序。它甚至可以将应用程序部署到仅公开端口80和443的Internet Cloud提供商。

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

使用触发文件

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

我们可以通过添加属性 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/。

步骤2: 提供 名称和 工件 ID。我们提供了组名 com.aizws 和工件ID spring-boot-devtools-example。

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

步骤4: 点击 生成按钮。它将下载项目的 Jar 文件。

步骤5: 提取Jar文件。

步骤6: 将文件夹导入STS。

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-devtools-example->完成

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

Spring Boot DevTools

步骤7: 打开 SpringBootDevtoolsExampleApplication.java 并将其作为Java应用程序运行。

然后,在应用程序中进行任何更改(编辑或删除一些文件或代码),然后保存所做的更改。保存更改后,服务器将重新启动并获取更改。

Spring Boot DevTools

下一章:Spring Boot 多模块项目

Multi-Module项目包含嵌套Maven项目的Spring Boot项目称为 多模块项目。在多模块项目中,父项目充当基础Maven配置的容器。换句话说, 多模块项目是从管理一组子模块的父pom构建的 ...