# Spring Boot Devtools 教程

> 原文： [https://howtodoinjava.com/spring-boot2/developer-tools-module-tutorial/](https://howtodoinjava.com/spring-boot2/developer-tools-module-tutorial/)

如果您使用最新的 UI 开发框架，例如 Node，[Angular](https://howtodoinjava.com/angularjs/angularjs-tutorial-helloworld-example/)，gulp 等。那么，每当某些代码发生更改时，您一定已经意识到 UI 在浏览器中的自动重装。 它非常有用，可以节省大量时间。

好吧，使用`spring-boot-devtools`依赖关系提供的功能，可以在 Spring Boot 应用程序中使用相同的功能。 让我们了解有关启用和使用这些功能的信息。

## 启用开发工具模块

在 Spring Boot 应用程序中启用开发工具非常容易。 只需在构建文件中添加`spring-boot-devtools`依赖项即可。

**Maven**

`pom.xml`

```java
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

```

**摇篮**

`build.gradle`

```java
dependencies {
	compile("org.springframework.boot:spring-boot-devtools")
}

```

## 静态资源缓存

为了提高性能，开发人员工具会缓存静态内容/模板文件，以将其更快地提供给浏览器/客户端。 这是生产中非常好的功能，每毫秒[性能的提高](https://howtodoinjava.com/best-practices/improving-web-application-performance/)都很重要。 但是在开发环境中，这可能是一个问题，并导致过时的缓存问题，并且您可能不会在浏览器中立即看到所做的更改。 开发工具模块通过设置很少的属性来提供此功能。

默认情况下，此功能处于禁用状态。 通过设置属性，可以使其在生产环境中使用。

有许多这样的 UI 模板库支持此功能。 例如 thymeleaf，freemarker，groovy，mustache 等

`application.properties`

```java
#spring.freemarker.cache = true //set true in production environment
spring.freemarker.cache = false //set false in development environment; It is false by default.

//Other such properties

spring.thymeleaf.cache = false
spring.mustache.cache = false
spring.groovy.template.cache = false

```

**自动刷新与自动重启** – 自动刷新（或自动加载）是指在浏览器中重新加载 UI，以查看静态内容更改。 自动重新启动是指重新加载服务器端代码和配置，然后重新启动服务器。

## 用户界面自动刷新

`spring-boot-devtools`模块包括一个嵌入式 LiveReload 服务器，该服务器可用于在更改资源时触发浏览器刷新。 前提条件是您的浏览器应支持扩展。 您可以在此[链接](https://livereload.com/extensions/)中找到这种浏览器范围。

默认情况下，启用实时重新加载。 如果您出于某些原因希望禁用此功能，请将`spring.devtools.livereload.enabled`属性设置为`false`。

`application.properties`

```java
spring.devtools.livereload.enabled  = false #Set false to disable live reload

```

#### 从自动重新加载中排除资源

默认情况下，自动重启在以下路径上起作用：

1.  `/META-INF/maven`
2.  `/META-INF/resources`
3.  `/resources`
4.  `/static`
5.  `/public`
6.  `/templates`

如果要在浏览器中为其中一些路径的文件禁用自动重装，请使用`spring.devtools.restart.exclude`属性。 例如

```java
spring.devtools.restart.exclude=static/**,public/**
```

#### 监视/排除其他路径

可能只有很少的文件不在类路径中，但是您仍然可能希望观看那些其他文件/路径以重新加载应用程序。 为此，请使用`spring.devtools.restart.additional-paths`属性。

```java
spring.devtools.restart.additional-paths=script/**
```

同样，如果要保留这些默认值，并且**添加其他排除项**，请改用`spring.devtools.restart.additional-exclude`属性。

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

## 服务器自动重启

自动重启意味着在服务器端重新加载 Java 类和配置。 在动态地重新部署服务器端更改之后，服务器将重新启动并加载修改后的代码和配置。

#### 启用/禁用自动配置更改的日志记录

默认情况下，每次应用程序重新启动时，都会记录一个报告，其中显示了条件评估增量。 该报告显示了您进行更改（例如添加或删除 Bean 以及设置配置属性）时对应用程序自动配置的更改。

要禁用报告的日志记录，请设置以下属性：

```java
spring.devtools.restart.log-condition-evaluation-delta = false
```

#### 禁用重启

要在非静态代码更改时禁用服务器重启，请使用属性`spring.devtools.restart.enabled`。

```java
spring.devtools.restart.enabled = false
```

#### 使用触发文件

每次文件更改都不希望自动重启，并且由于频繁重启，有时可能会减慢开发时间。 要解决此问题，可以使用触发文件。 Spring Boot 将继续监视该文件，一旦检测到该文件中的任何修改，它将重新启动服务器并重新加载所有先前的更改。

使用`spring.devtools.restart.trigger-file`属性提及您的应用程序的触发文件。 它可以是任何外部或内部文件。

```java
spring.devtools.restart.trigger-file = c:/workspace/restart-trigger.txt
```

## 全局设置文件

每次为所有 spring boot 项目或模块设置所有您喜欢的配置选项可能会成为重复的工作。 您可以使用全局设置文件将其最小化。 然后，各个项目/模块将从全局文件继承所有自定义设置，并且如果需要，它们可以覆盖每个项目基础的任何特定设置。

要创建全局文件，请转到系统用户的主目录并创建一个名为`.spring-boot-devtools.properties`的文件。 （请注意，文件名以点开头）。 不要使用此全局属性文件来配置全局可用选项。

`.spring-boot-devtools.properties`

```java
spring.devtools.restart.trigger-file = c:/workspace/restart-trigger.txt

```

将我的问题放在评论部分。

学习愉快！

参考： [Spring boot 参考](https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html)