此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

Spring Boot 包含一组额外的工具,可以使应用程序开发体验更加愉快。 该模块可以包含在任何项目中,以提供额外的开发时功能。 若要包含 devtools 支持,请将模块依赖项添加到构建中,如以下 Maven 和 Gradle 清单所示:spring-boot-devtoolsSpring中文文档

Maven
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>
Gradle
dependencies {
	developmentOnly("org.springframework.boot:spring-boot-devtools")
}
Devtools 可能会导致类加载问题,尤其是在多模块项目中。诊断类加载问题 介绍了如何诊断和解决这些问题。
开发人员工具在运行完全打包的应用程序时会自动禁用。 如果应用程序是从特殊类装入器启动的,或者是从特殊类装入器启动的,则将其视为“生产应用程序”。 可以使用 system 属性来控制此行为。 若要启用 devtools,无论用于启动应用程序的类装入器如何,请设置 system 属性。 在运行 devtools 存在安全风险的生产环境中,不得执行此操作。 若要禁用 devtools,请排除依赖项或设置 system 属性。java -jarspring.devtools.restart.enabled-Dspring.devtools.restart.enabled=true-Dspring.devtools.restart.enabled=false
在 Maven 中将依赖项标记为可选项或在 Gradle 中使用配置(如上所示)可防止 devtools 以可传递方式应用于使用您项目的其他模块。developmentOnly
默认情况下,重新打包的存档不包含 devtools。 如果要使用某个远程开发工具功能,则需要包含它。 使用 Maven 插件时,将属性设置为 。 使用 Gradle 插件时,请将任务的类路径配置为包含 developmentOnly 配置excludeDevtoolsfalse
Devtools 可能会导致类加载问题,尤其是在多模块项目中。诊断类加载问题 介绍了如何诊断和解决这些问题。
开发人员工具在运行完全打包的应用程序时会自动禁用。 如果应用程序是从特殊类装入器启动的,或者是从特殊类装入器启动的,则将其视为“生产应用程序”。 可以使用 system 属性来控制此行为。 若要启用 devtools,无论用于启动应用程序的类装入器如何,请设置 system 属性。 在运行 devtools 存在安全风险的生产环境中,不得执行此操作。 若要禁用 devtools,请排除依赖项或设置 system 属性。java -jarspring.devtools.restart.enabled-Dspring.devtools.restart.enabled=true-Dspring.devtools.restart.enabled=false
在 Maven 中将依赖项标记为可选项或在 Gradle 中使用配置(如上所示)可防止 devtools 以可传递方式应用于使用您项目的其他模块。developmentOnly
默认情况下,重新打包的存档不包含 devtools。 如果要使用某个远程开发工具功能,则需要包含它。 使用 Maven 插件时,将属性设置为 。 使用 Gradle 插件时,请将任务的类路径配置为包含 developmentOnly 配置excludeDevtoolsfalse

诊断类加载问题

“重新启动与重新加载”部分所述,重新启动功能是通过使用两个类装入器实现的。 对于大多数应用程序,此方法效果很好。 但是,它有时会导致类加载问题,尤其是在多模块项目中。Spring中文文档

要诊断类加载问题是否确实是由 devtools 及其两个类加载器引起的,请尝试禁用 restart。 如果这解决了您的问题,请自定义重新启动类装入器以包含您的整个项目。Spring中文文档

属性默认值

Spring Boot 支持的几个库使用缓存来提高性能。 例如,模板引擎缓存已编译的模板,以避免重复解析模板文件。 此外,Spring MVC 可以在提供静态资源时将 HTTP 缓存标头添加到响应中。Spring中文文档

虽然缓存在生产环境中非常有益,但在开发过程中可能会适得其反,使您无法看到刚刚在应用程序中所做的更改。 因此,spring-boot-devtools 默认禁用缓存选项。Spring中文文档

缓存选项通常由文件中的设置进行配置。 例如,百里香叶(Thymeleaf)提供该物业。 该模块无需手动设置这些属性,而是自动应用合理的开发时配置。application.propertiesspring.thymeleaf.cachespring-boot-devtoolsSpring中文文档

下表列出了应用的所有属性:Spring中文文档

名字 默认值

server.error.include-binding-errorsSpring中文文档

alwaysSpring中文文档

server.error.include-messageSpring中文文档

alwaysSpring中文文档

server.error.include-stacktraceSpring中文文档

alwaysSpring中文文档

server.servlet.jsp.init-parameters.developmentSpring中文文档

trueSpring中文文档

server.servlet.session.persistentSpring中文文档

trueSpring中文文档

spring.docker.compose.readiness.waitSpring中文文档

only-if-startedSpring中文文档

spring.freemarker.cacheSpring中文文档

falseSpring中文文档

spring.graphql.graphiql.enabledSpring中文文档

trueSpring中文文档

spring.groovy.template.cacheSpring中文文档

falseSpring中文文档

spring.h2.console.enabledSpring中文文档

trueSpring中文文档

spring.mustache.servlet.cacheSpring中文文档

falseSpring中文文档

spring.mvc.log-resolved-exceptionSpring中文文档

trueSpring中文文档

spring.reactor.netty.shutdown-quiet-periodSpring中文文档

0sSpring中文文档

spring.template.provider.cacheSpring中文文档

falseSpring中文文档

spring.thymeleaf.cacheSpring中文文档

falseSpring中文文档

spring.web.resources.cache.periodSpring中文文档

0Spring中文文档

spring.web.resources.chain.cacheSpring中文文档

falseSpring中文文档

如果不希望应用属性默认值,可以在 中设置为 。spring.devtools.add-propertiesfalseapplication.properties

由于在开发 Spring MVC 和 Spring WebFlux 应用程序时需要有关 Web 请求的更多信息,因此开发人员工具建议您为日志记录组启用日志记录。 这将为您提供有关传入请求、哪个处理程序正在处理它、响应结果和其他详细信息的信息。 如果要记录所有请求详细信息(包括潜在的敏感信息),可以打开 or 配置属性。DEBUGwebspring.mvc.log-request-detailsspring.codec.log-request-detailsSpring中文文档

名字 默认值

server.error.include-binding-errorsSpring中文文档

alwaysSpring中文文档

server.error.include-messageSpring中文文档

alwaysSpring中文文档

server.error.include-stacktraceSpring中文文档

alwaysSpring中文文档

server.servlet.jsp.init-parameters.developmentSpring中文文档

trueSpring中文文档

server.servlet.session.persistentSpring中文文档

trueSpring中文文档

spring.docker.compose.readiness.waitSpring中文文档

only-if-startedSpring中文文档

spring.freemarker.cacheSpring中文文档

falseSpring中文文档

spring.graphql.graphiql.enabledSpring中文文档

trueSpring中文文档

spring.groovy.template.cacheSpring中文文档

falseSpring中文文档

spring.h2.console.enabledSpring中文文档

trueSpring中文文档

spring.mustache.servlet.cacheSpring中文文档

falseSpring中文文档

spring.mvc.log-resolved-exceptionSpring中文文档

trueSpring中文文档

spring.reactor.netty.shutdown-quiet-periodSpring中文文档

0sSpring中文文档

spring.template.provider.cacheSpring中文文档

falseSpring中文文档

spring.thymeleaf.cacheSpring中文文档

falseSpring中文文档

spring.web.resources.cache.periodSpring中文文档

0Spring中文文档

spring.web.resources.chain.cacheSpring中文文档

falseSpring中文文档

如果不希望应用属性默认值,可以在 中设置为 。spring.devtools.add-propertiesfalseapplication.properties

自动重启

每当类路径上的文件发生更改时,使用的应用程序都会自动重新启动。 在 IDE 中工作时,这可能是一个有用的功能,因为它为代码更改提供了非常快速的反馈循环。 默认情况下,类路径上指向目录的任何条目都会受到监视,以防发生更改。 请注意,某些资源(如静态资产和视图模板)不需要重新启动应用程序spring-boot-devtoolsSpring中文文档

触发重新启动

当 DevTools 监视类路径资源时,触发重启的唯一方法是更新类路径。 无论您使用的是 IDE 还是某个构建插件,都必须重新编译修改后的文件才能触发重新启动。 更新类路径的方式取决于您使用的工具:Spring中文文档

  • 在 Eclipse 中,保存修改后的文件会导致类路径更新并触发重新启动。Spring中文文档

  • 在 IntelliJ IDEA 中,构建项目 () 具有相同的效果。Build -> Build ProjectSpring中文文档

  • 如果使用构建插件,则运行 Maven 或 Gradle 将触发重新启动。mvn compilegradle buildSpring中文文档

如果您使用 build 插件重新启动 Maven 或 Gradle,则必须将该设置保留为 。 如果禁用 forking,则不会创建 devtools 使用的独立应用程序类装入器,并且重新启动将无法正常运行。forkingenabled
与 LiveReload 一起使用时,自动重启效果非常好。有关详细信息,请参阅 LiveReload 部分。 如果使用 JRebel,则会禁用自动重启,以支持动态类重新加载。 仍然可以使用其他 devtools 功能(如 LiveReload 和属性替代)。
DevTools 依赖于应用程序上下文的关闭挂钩在重启期间将其关闭。 如果禁用了关机挂钩 (),则无法正常工作。SpringApplication.setRegisterShutdownHook(false)
DevTools 需要自定义 . 如果您的应用程序已经提供了一个,它将被包装。 不支持直接覆盖 上的方法。ResourceLoaderApplicationContextgetResourceApplicationContext
使用 AspectJ 编织时不支持自动重启。
重启与重新加载

Spring Boot 提供的重启技术通过使用两个类加载器来工作。 不更改的类(例如,来自第三方 jar 的类)将加载到类装入器中。 您正在积极开发的类将加载到重新启动类装入器中。 重新启动应用程序时,将丢弃重新启动类装入器并创建一个新类装入器。 这种方法意味着应用程序重启通常比“冷启动”快得多,因为类装入器已经可用并已填充。Spring中文文档

如果您发现重新启动的速度对于您的应用程序来说不够快,或者遇到类加载问题,您可以考虑重新加载技术,例如 ZeroTurnaround 的 JRebel。 它们的工作原理是在加载类时重写它们,使它们更适合重新加载。Spring中文文档

记录状态评估中的更改

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

若要禁用报表的日志记录,请设置以下属性:Spring中文文档

spring.devtools.restart.log-condition-evaluation-delta=false
spring:
  devtools:
    restart:
      log-condition-evaluation-delta: false

排除资源

某些资源在更改时不一定需要触发重新启动。 例如,可以就地编辑 Thymeleaf 模板。 默认情况下,更改 、 、 、 、 或 中的资源不会触发重新启动,但会触发实时重新加载。 如果要自定义这些排除项,可以使用该属性。 例如,若要仅排除,并且将设置以下属性:/META-INF/maven/META-INF/resources/resources/static/public/templatesspring.devtools.restart.exclude/static/publicSpring中文文档

spring.devtools.restart.exclude=static/**,public/**
spring:
  devtools:
    restart:
      exclude: "static/**,public/**"
如果要保留这些默认值并添加其他排除项,请改用该属性。spring.devtools.restart.additional-exclude

观察其他路径

您可能希望在对不在类路径上的文件进行更改时重新启动或重新加载应用程序。 为此,请使用该属性配置其他路径以监视更改。 可以使用前面所述的属性来控制其他路径下的更改是触发完全重新启动还是实时重新加载spring.devtools.restart.additional-pathsspring.devtools.restart.excludeSpring中文文档

禁用重启

如果不想使用重新启动功能,可以使用该属性禁用它。 在大多数情况下,您可以在 your 中设置此属性(这样做仍然会初始化重新启动类装入器,但它不会监视文件更改)。spring.devtools.restart.enabledapplication.propertiesSpring中文文档

如果需要完全禁用重新启动支持(例如,因为它不适用于特定库),则需要将该属性设置为 之前调用,如以下示例所示:spring.devtools.restart.enabledSystemfalseSpringApplication.run(…​)Spring中文文档

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

	public static void main(String[] args) {
		System.setProperty("spring.devtools.restart.enabled", "false");
		SpringApplication.run(MyApplication.class, args);
	}

}
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication
object MyApplication {

	@JvmStatic
	fun main(args: Array<String>) {
		System.setProperty("spring.devtools.restart.enabled", "false")
		SpringApplication.run(MyApplication::class.java, *args)
	}

}

使用触发器文件

如果使用连续编译已更改文件的 IDE,则可能希望仅在特定时间触发重新启动。 为此,您可以使用“触发文件”,这是一个特殊文件,当您想要实际触发重新启动检查时,必须对其进行修改。Spring中文文档

对文件的任何更新都将触发检查,但只有在 Devtools 检测到它有操作时,才会实际重启。

若要使用触发器文件,请将该属性设置为触发器文件的名称(不包括任何路径)。 触发器文件必须出现在类路径上的某个位置。spring.devtools.restart.trigger-fileSpring中文文档

例如,如果您有一个具有以下结构的项目:Spring中文文档

src
+- main
   +- resources
      +- .reloadtrigger

那么你的财产将是:trigger-fileSpring中文文档

spring.devtools.restart.trigger-file=.reloadtrigger
spring:
  devtools:
    restart:
      trigger-file: ".reloadtrigger"

现在,只有在更新时才会重新启动。src/main/resources/.reloadtriggerSpring中文文档

您可能希望设置为全局设置,以便所有项目的行为方式相同。spring.devtools.restart.trigger-file

某些 IDE 具有一些功能,使您无需手动更新触发器文件。Spring Tools for EclipseIntelliJ IDEA(旗舰版)都有这样的支持。 使用 Spring Tools,您可以使用控制台视图中的“重新加载”按钮(只要 your 被命名为 )。 对于 IntelliJ IDEA,您可以按照其文档中的说明进行操作。trigger-file.reloadtriggerSpring中文文档

自定义重新启动类加载器

如前面的“重新启动与重新加载”部分所述,重新启动功能是通过使用两个类装入器来实现的。 如果这导致问题,可以使用 system 属性诊断问题,如果应用在关闭重启的情况下工作,则可能需要自定义哪个类加载器加载的内容。spring.devtools.restart.enabledSpring中文文档

默认情况下,IDE 中任何打开的项目都使用 “restart” 类装入器加载,任何常规文件都使用 “base” 类装入器加载。 如果你使用 or 也是如此:包含 your 的项目用 “restart” 类装入器加载,其他所有项目都用 “base” 类装入器加载。 启动应用时,类路径将打印在控制台上,这有助于识别任何有问题的条目。 反射使用的类,尤其是注释,可以在启动时先加载到使用它们的应用程序类之前加载到父类(固定)类加载器中,这可能会导致 Spring 在应用程序中无法检测到它们。.jarmvn spring-boot:rungradle bootRun@SpringBootApplicationSpring中文文档

您可以通过创建文件来指示 Spring Boot 使用不同的类加载器加载项目的某些部分。 该文件可以包含以 和 为前缀的属性。 元素是应该被拉到“重新启动”类装入器中的项,而元素是应该被下推到“基本”类装入器中的项。 该属性的值是一个正则表达式模式,该模式应用于启动时传递给 JVM 的类路径。 下面是一个示例,其中排除了一些本地类文件,并在重新启动类加载器中包含了一些额外的库:META-INF/spring-devtools.propertiesspring-devtools.propertiesrestart.excluderestart.includeincludeexcludeSpring中文文档

restart:
  exclude:
    companycommonlibs: "/mycorp-common-[\\w\\d-\\.]/(build|bin|out|target)/"
  include:
    projectcommon: "/mycorp-myproj-[\\w\\d-\\.]+\\.jar"
所有属性键必须是唯一的。 只要一个属性以 开头或被考虑。restart.include.restart.exclude.
将加载类路径中的所有内容。 您可以将文件打包到项目内部或项目使用的库中。 不能使用系统属性,只能使用属性文件。META-INF/spring-devtools.properties

已知限制

重新启动功能不适用于使用标准 反序列化的对象。 如果需要反序列化数据,则可能需要将 Spring 与 .ObjectInputStreamConfigurableObjectInputStreamThread.currentThread().getContextClassLoader()Spring中文文档

不幸的是,一些第三方库在不考虑上下文类加载器的情况下反序列化。 如果您发现此类问题,则需要向原作者请求修复。Spring中文文档

如果您使用 build 插件重新启动 Maven 或 Gradle,则必须将该设置保留为 。 如果禁用 forking,则不会创建 devtools 使用的独立应用程序类装入器,并且重新启动将无法正常运行。forkingenabled
与 LiveReload 一起使用时,自动重启效果非常好。有关详细信息,请参阅 LiveReload 部分。 如果使用 JRebel,则会禁用自动重启,以支持动态类重新加载。 仍然可以使用其他 devtools 功能(如 LiveReload 和属性替代)。
DevTools 依赖于应用程序上下文的关闭挂钩在重启期间将其关闭。 如果禁用了关机挂钩 (),则无法正常工作。SpringApplication.setRegisterShutdownHook(false)
DevTools 需要自定义 . 如果您的应用程序已经提供了一个,它将被包装。 不支持直接覆盖 上的方法。ResourceLoaderApplicationContextgetResourceApplicationContext
使用 AspectJ 编织时不支持自动重启。
如果要保留这些默认值并添加其他排除项,请改用该属性。spring.devtools.restart.additional-exclude
对文件的任何更新都将触发检查,但只有在 Devtools 检测到它有操作时,才会实际重启。
您可能希望设置为全局设置,以便所有项目的行为方式相同。spring.devtools.restart.trigger-file
所有属性键必须是唯一的。 只要一个属性以 开头或被考虑。restart.include.restart.exclude.
将加载类路径中的所有内容。 您可以将文件打包到项目内部或项目使用的库中。 不能使用系统属性,只能使用属性文件。META-INF/spring-devtools.properties

LiveReload

该模块包括一个嵌入式 LiveReload 服务器,可用于在资源更改时触发浏览器刷新。 LiveReload 浏览器扩展程序可免费用于 Chrome、Firefox 和 Safari。 您可以通过在所选浏览器的市场或商店中搜索“LiveReload”来找到这些扩展程序。spring-boot-devtoolsSpring中文文档

如果不想在应用程序运行时启动 LiveReload 服务器,可以将该属性设置为 。spring.devtools.livereload.enabledfalseSpring中文文档

一次只能运行一个 LiveReload 服务器。 在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。 如果从 IDE 启动多个应用程序,则只有第一个应用程序支持 LiveReload。
若要在文件更改时触发 LiveReload,必须启用自动重新启动
一次只能运行一个 LiveReload 服务器。 在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。 如果从 IDE 启动多个应用程序,则只有第一个应用程序支持 LiveReload。
若要在文件更改时触发 LiveReload,必须启用自动重新启动

全局设置

可以通过将以下任何文件添加到目录来配置全局 devtools 设置:$HOME/.config/spring-bootSpring中文文档

  1. spring-boot-devtools.propertiesSpring中文文档

  2. spring-boot-devtools.yamlSpring中文文档

  3. spring-boot-devtools.ymlSpring中文文档

添加到这些文件的任何属性都适用于计算机上使用 devtools 的所有 Spring Boot 应用程序。 例如,若要将重新启动配置为始终使用触发器文件,请将以下属性添加到文件中:spring-boot-devtoolsSpring中文文档

spring.devtools.restart.trigger-file=.reloadtrigger
spring:
  devtools:
    restart:
      trigger-file: ".reloadtrigger"

默认情况下,是用户的主目录。 若要自定义此位置,请设置环境变量或系统属性。$HOMESPRING_DEVTOOLS_HOMEspring.devtools.homeSpring中文文档

如果在 中找不到 devtools 配置文件,则在目录的根目录中搜索文件是否存在。 这允许您与不支持该位置的旧版本的 Spring Boot 上的应用程序共享 devtools 全局配置。$HOME/.config/spring-boot$HOME.spring-boot-devtools.properties$HOME/.config/spring-boot

devtools properties/yaml 文件中不支持配置文件。Spring中文文档

在其中激活的任何配置文件都不会影响特定于配置文件的配置文件的加载。 不支持 YAML 和属性文件中的配置文件特定文件名(形式)和文档。.spring-boot-devtools.propertiesspring-boot-devtools-<profile>.propertiesspring.config.activate.on-profileSpring中文文档

配置文件系统观察程序

FileSystemWatcher 的工作原理是轮询具有特定时间间隔的类更改,然后等待预定义的静默期以确保没有更多更改。 由于 Spring Boot 完全依赖于 IDE 来编译文件并将其复制到 Spring Boot 可以读取它们的位置,因此您可能会发现,有时当 devtools 重新启动应用程序时,某些更改不会反映出来。 如果经常观察到此类问题,请尝试将 and 参数增加到适合您的开发环境的值:spring.devtools.restart.poll-intervalspring.devtools.restart.quiet-periodSpring中文文档

spring.devtools.restart.poll-interval=2s
spring.devtools.restart.quiet-period=1s
spring:
  devtools:
    restart:
      poll-interval: "2s"
      quiet-period: "1s"

现在,每 2 秒轮询一次受监视的类路径目录以查找更改,并保持 1 秒的静默期以确保没有其他类更改。Spring中文文档

如果在 中找不到 devtools 配置文件,则在目录的根目录中搜索文件是否存在。 这允许您与不支持该位置的旧版本的 Spring Boot 上的应用程序共享 devtools 全局配置。$HOME/.config/spring-boot$HOME.spring-boot-devtools.properties$HOME/.config/spring-boot

devtools properties/yaml 文件中不支持配置文件。Spring中文文档

在其中激活的任何配置文件都不会影响特定于配置文件的配置文件的加载。 不支持 YAML 和属性文件中的配置文件特定文件名(形式)和文档。.spring-boot-devtools.propertiesspring-boot-devtools-<profile>.propertiesspring.config.activate.on-profileSpring中文文档

远程应用程序

Spring Boot 开发人员工具不仅限于本地开发。 远程运行应用程序时,您还可以使用多种功能。 远程支持是选择加入的,因为启用它可能会带来安全风险。 只有在受信任的网络上运行或使用 SSL 保护时,才应启用它。 如果这两个选项都不可用,则不应使用 DevTools 的远程支持。 切勿启用对生产部署的支持。Spring中文文档

要启用它,您需要确保它包含在重新打包的存档中,如以下清单所示:devtoolsSpring中文文档

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<excludeDevtools>false</excludeDevtools>
			</configuration>
		</plugin>
	</plugins>
</build>

然后,您需要设置属性。 与任何重要的密码或机密一样,该值应该是唯一且强大的,以便无法被猜测或暴力破解。spring.devtools.remote.secretSpring中文文档

远程开发工具支持分为两部分:接受连接的服务器端端点和在 IDE 中运行的客户端应用程序。 设置属性时,将自动启用服务器组件。 客户端组件必须手动启动。spring.devtools.remote.secretSpring中文文档

Spring WebFlux 应用程序不支持远程开发工具。

运行远程客户端应用程序

远程客户端应用程序设计为在 IDE 中运行。 您需要使用与连接到的远程项目相同的类路径运行。 应用程序的单个必需参数是它连接到的远程 URL。org.springframework.boot.devtools.RemoteSpringApplicationSpring中文文档

例如,如果您使用的是 Eclipse 或 Spring Tools,并且您有一个名为 Cloud Foundry 的项目,则可以执行以下操作:my-appSpring中文文档

正在运行的远程客户端可能类似于以下清单:Spring中文文档

  .   ____          _                                              __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
 \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
  '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
 =========|_|==============|___/===================================/_/_/_/
 :: Spring Boot Remote ::  (v3.3.2-SNAPSHOT)

2024-06-22T03:35:28.253Z  INFO 81424 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication v3.3.2-SNAPSHOT using Java 17.0.11 with PID 81424 (/Users/myuser/.m2/repository/org/springframework/boot/spring-boot-devtools/3.3.2-SNAPSHOT/spring-boot-devtools-3.3.2-SNAPSHOT.jar started by myuser in /opt/apps/)
2024-06-22T03:35:28.278Z  INFO 81424 --- [           main] o.s.b.devtools.RemoteSpringApplication   : No active profile set, falling back to 1 default profile: "default"
2024-06-22T03:35:29.107Z  INFO 81424 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2024-06-22T03:35:29.175Z  INFO 81424 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 2.072 seconds (process running for 3.238)
由于远程客户端使用与实际应用程序相同的类路径,因此它可以直接读取应用程序属性。 这就是读取属性并将其传递到服务器进行身份验证的方式。spring.devtools.remote.secret
始终建议将其用作连接协议,以便对流量进行加密并且无法拦截密码。https://
如果需要使用代理访问远程应用程序,请配置 and 属性。spring.devtools.remote.proxy.hostspring.devtools.remote.proxy.port

远程更新

远程客户端以与本地重新启动相同的方式监视应用程序类路径的更改。 任何更新的资源都会推送到远程应用程序,并(如果需要)触发重新启动。 如果迭代使用本地没有的云服务的功能,这将很有帮助。 通常,远程更新和重启比完整的重新生成和部署周期快得多。Spring中文文档

在较慢的开发环境中,可能会出现静默期不够的情况,类中的更改可能会被分成批处理。 上传第一批类更改后,服务器将重新启动。 由于服务器正在重新启动,因此无法将下一批发送到应用程序。Spring中文文档

这通常表现为日志中有关无法上传某些类的警告,以及随后的重试。 但也可能导致应用程序代码不一致,上传第一批更改后无法重启。 如果经常观察到此类问题,请尝试将 and 参数增加到适合您的开发环境的值。 有关配置这些属性的信息,请参阅配置文件系统观察程序部分。RemoteSpringApplicationspring.devtools.restart.poll-intervalspring.devtools.restart.quiet-periodSpring中文文档

仅当远程客户端正在运行时,才会监视文件。 如果在启动远程客户端之前更改文件,则不会将其推送到远程服务器。
Spring WebFlux 应用程序不支持远程开发工具。
由于远程客户端使用与实际应用程序相同的类路径,因此它可以直接读取应用程序属性。 这就是读取属性并将其传递到服务器进行身份验证的方式。spring.devtools.remote.secret
始终建议将其用作连接协议,以便对流量进行加密并且无法拦截密码。https://
如果需要使用代理访问远程应用程序,请配置 and 属性。spring.devtools.remote.proxy.hostspring.devtools.remote.proxy.port
仅当远程客户端正在运行时,才会监视文件。 如果在启动远程客户端之前更改文件,则不会将其推送到远程服务器。