🍊
翻译橙
🍊返回主站🤖参与贡献
  • hello,这里是翻译橙
  • spring boot参考文档
    • 1. 法律
    • 2. 寻求帮助
    • 3. 文档概述
    • 4. 入门
    • 5. 升级Spring Boot
    • 6. 使用 Spring Boot 进行开发
      • 6.1. 构建系统
      • 6.2. 构建你的代码
      • 6.3. 配置类
      • 6.4. 自动配置
      • 6.5. Spring Bean 和依赖注入
      • 6.6. 使用@SpringBootApplication注解
      • 6.7. 运行您的应用程序
      • 6.8. 开发者工具
      • 6.9. 打包您的生产应用程序
      • 6.10. 接下来读什么
    • 7.核心特性
      • 7.1. SpringApplication
      • 7.2. 外部化配置
      • 7.3.Profile配置
      • 7.4.日志记录
      • 7.5.国际化
      • 7.6 面向切面的编程
      • 7.7. JSON
      • 7.8. 任务执行与调度
      • 7.9. 单元测试
        • 7.9.1. 测试范围依赖
        • 7.9.2. 测试 Spring 应用程序
        • 7.9.3. 测试 Spring Boot 应用程序
        • 7.9.4. 测试容器
        • 7.9.5. 测试工具
      • 7.10. Docker Compose 支持
      • 7.11. 测试容器支持
      • 7.12. 创建您自己的自动配置
      • 7.13. Kotlin 支持
      • 7.14 SSL
      • 7.15.接下来要读什么
    • 8. 网络
      • 8.1. Servlet Web 应用程序
        • 8.1.1. “Spring Web MVC 框架”
        • 8.1.2. JAX-RS 和Jersey
        • 8.1.3. 嵌入式 Servlet 容器支持
      • 8.2 反应式网络应用程序
        • 8.2.1. “Spring WebFlux 框架”
        • 8.2.2. 嵌入式反应式服务器支持
        • 8.2.3. 反应式服务器资源配置
      • 8.3. 优雅关机
      • 8.4. spring安全
        • 8.4.1. MVC安全
        • 8.4.2. WebFlux 安全
        • 8.4.3. OAuth2
        • 8.4.4. SAML 2.0
      • 8.5. spring 会话
      • 8.6.GraphQL
      • 8.7. Spring HATEOAS
      • 8.8.接下来读什么
    • 9. 数据
      • 9.1. SQL数据库
      • 9.2. 使用 NoSQL 技术
      • 9.3. 接下来读什么
    • 10. 消息
      • 10.1. JMS
      • 10.2. AMQP
      • 10.3. Apache Kafka 支持
      • 10.4. Apache Pulsar 支持
      • 10.5. RSocket
      • 10.6. Spring Integration
      • 10.7. WebSockets
      • 10.8. What to Read Next
    • 11. IO
      • 11.1. 缓存
      • 11.2. Hazelcast
      • 11.3. Quartz 调度程序
      • 11.4. 发送电子邮件
      • 11.5. 验证
      • 11.6. 调用 REST 服务
      • 11.7. web services
      • 11.8. 使用 JTA 进行分布式事务
      • 11.9. 接下来读什么
    • 12. 容器镜像
  • Spring核心功能
    • 1.IOC容器和Bean简介
      • 1.2. 容器概述
      • 1.3. Bean概述
      • 1.4. 依赖项
        • 1.4.1. 依赖注入
        • 1.4.2. 详细的依赖关系和配置
        • 1.4.3. 使用depends-on
        • 1.4.4. 延迟初始化的 Bean
        • 1.4.5. 自动装配协作者
        • 1.4.6. 方法注入
    • 2. Resources
      • 2.1. 介绍
      • 2.2. Resource接口
      • 2.3. 内置Resource实现
      • 2.4. ResourceLoader接口
      • 2.5. ResourcePatternResolver接口
      • 2.6. ResourceLoaderAware接口
      • 2.7. 资源作为依赖
      • 2.8. 应用程序上下文和资源路径
    • 3. 验证、数据绑定和类型转换
      • 3.1. 使用 Spring 的 Validator 接口进行验证
      • 3.2. 将代码解析为错误消息
      • 3.3. Bean 操作和BeanWrapper
      • 3.4. spring类型转换
      • 3.5. spring字段格式
      • 3.6. 配置全局日期和时间格式
      • 3.7. Java Bean 验证
    • 4. SpEL表达式
    • 5. Spring 面向切面编程
      • 5.1. AOP 概念
      • 5.2. Spring AOP 的能力和目标
      • 5.3. AOP 代理
      • 5.4. @AspectJ 支持
        • 5.4.1. 启用@AspectJ 支持
        • 5.4.2. 声明一个切面
        • 5.4.3. 声明切入点
        • 5.4.4. 声明切点
        • 5.4.5. 切面说明
        • 5.4.6. 切面实例化模型
        • 5.4.7. AOP 示例
      • 5.5. 基于模式的 AOP 支持
      • 5.6. 选择要使用的 AOP 声明样式
      • 5.7. 混合切面类型
      • 5.8. 代理机制
      • 5.9. @AspectJ 代理的程序化创建
      • 5.10. 在 Spring 应用程序中使用 AspectJ
      • 5.11.更多资源
    • 6. Spring AOP API
      • 6.1. Spring中的切入点API
      • 6.2. Spring 中的 Advice API
      • 6.3. Spring 中的 Advisor API
      • 6.4. 使用ProxyFactoryBean创建 AOP 代理
      • 6.5. 简洁的代理定义
      • 6.6. 以编程方式创建 AOP 代理ProxyFactory
      • 6.7. 操作切面对象
      • 6.8. 使用“自动代理”工具
      • 6.9. 使用TargetSource实现
      • 6.10. 定义新的切面类型
    • 7. 空指针安全
    • 8. 数据缓冲器和编解码器
    • 9. 日志
    • 10. 附录
      • 10.1. XML 模式
      • 10.2. 自定义XML Schema
        • 10.2.1. 创作 Schema
        • 10.2.2. 编码一个NamespaceHandler
        • 10.2.3. 使用BeanDefinitionParser
        • 10.2.4. 注册处理程序和模式
        • 10.2.5. 在 Spring XML 配置中使用自定义扩展
        • 10.2.6. 更详细的例子
      • 10.3. 应用程序启动步骤
  • 使用redis实现分布式锁
  • Java 安全标准算法名称
  • JDK 9 JEP
  • JDK 10 JEP
  • 人件
    • 《人件》
    • 第一部分 管理人力资源
      • 01 此时此刻,一个项目正在走向失败
      • 02 干酪汉堡,做一个,卖一个
      • 03 维也纳在等你
      • 04 质量——如果时间允许
      • 05 再谈帕金森定律
      • 06 苦杏素
    • 第二部分 办公环境
      • 07 家具警察
      • 08 “朝九晚五在这里啥也完成不了。”
      • 09 在空间上省钱
      • 间奏曲:生产效率度量和不明飞行物
      • 10 大脑时问与身体时间
      • 11 电话
      • 12 门的回归
      • 13 采取保护步骤
    • 第三部分 正确的人
      • 14 霍恩布洛尔因素
      • 15 谈谈领导力
      • 16 雇一名杂耍演员
      • 17 与他人良好合作
      • 18 童年的终结
      • 19 在这儿很开心
      • 20 人力资本
    • 第四部分 高效团队养成
      • 21 整体大于部分之和
      • 22 黑衣团队
      • 23 团队自毁
      • 24 再谈团队自毁
      • 25 竞争
      • 26 一顿意面晚餐
      • 27 敞开和服
      • 28 团队形成的化学反应
    • 第五部分 沃土
      • 29 自我愈复系统
      • 30 与风险共舞
      • 3l 会议、独白和交流
      • 32 终极管理罪恶得主是……
      • 33 “邪恶”电邮
      • 34 让改变成为可能
      • 35 组织型学习
      • 36 构建社区
    • 第六部分 快乐地工作
      • 37 混乱与秩序
      • 38 自由电子
      • 39 霍尔加·丹斯克
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. spring boot参考文档
  2. 6. 使用 Spring Boot 进行开发

6.8. 开发者工具

上一页6.7. 运行您的应用程序下一页6.9. 打包您的生产应用程序

最后更新于1年前

这有帮助吗?

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

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")
}

开发工具可能会导致类加载问题,特别是在多模块项目中。 解释了如何诊断和解决这些问题。

运行完全打包的应用程序时,开发人员工具会自动禁用。如果您的应用程序是从java -jar特殊的类加载器启动的,则它被视为“生产应用程序”。您可以使用spring.devtools.restart.enabled系统属性来控制此行为。要启用 devtools,无论用于启动应用程序的类加载器如何,请设置-Dspring.devtools.restart.enabled=true系统属性。不得在运行 devtools 存在安全风险的生产环境中执行此操作。要禁用开发工具,请排除依赖项或设置-Dspring.devtools.restart.enabled=false系统属性。

在 Maven 中将依赖项标记为可选或使用developmentOnlyGradle 中的配置(如上所示)可防止 devtools 传递应用于使用您的项目的其他模块。

重新打包的存档默认不包含开发工具。如果你想使用,你需要包含它。使用 Maven 插件时,将该excludeDevtools属性设置为false。使用 Gradle 插件时,.

6.8.1. 诊断类加载问题

部分所述,重新启动功能是通过使用两个类加载器来实现的。对于大多数应用程序来说,这种方法效果很好。但是,它有时会导致类加载问题,特别是在多模块项目中。

6.8.2. 属性默认值

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

缓存选项通常通过application.properties文件中的设置进行配置。例如,Thymeleaf 就提供spring.thymeleaf.cache属性。该模块不需要手动设置这些属性,而是spring-boot-devtools自动应用合理的开发时配置。

下表列出了所有应用的属性:

姓名

默认值

server.error.include-binding-errors

always

server.error.include-message

always

server.error.include-stacktrace

always

server.servlet.jsp.init-parameters.development

true

server.servlet.session.persistent

true

spring.docker.compose.readiness.wait

only-if-started

spring.freemarker.cache

false

spring.graphql.graphiql.enabled

true

spring.groovy.template.cache

false

spring.h2.console.enabled

true

spring.mustache.servlet.cache

false

spring.mvc.log-resolved-exception

true

spring.reactor.netty.shutdown-quiet-period

0s

spring.template.provider.cache

false

spring.thymeleaf.cache

false

spring.web.resources.cache.period

0

spring.web.resources.chain.cache

false

如果您不希望应用属性默认值,您可以在application.properties将相应的spring.devtools.add-properties设置为 false

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

6.8.3. 自动重启

触发重启

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

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

  • 在 IntelliJ IDEA 中,构建项目 ( Build +→+ Build Project) 具有相同的效果。

  • 如果使用构建插件,运行Mavenmvn compile 或Gradle 将 gradle build触发重新启动。

如果您使用构建插件重新启动 Maven 或 Gradle,则必须将设置保留forking为enabled. 如果禁用分叉,则将不会创建 devtools 使用的隔离应用程序类加载器,并且重新启动将无法正常运行。

DevTools 依赖应用程序上下文的关闭挂钩在重新启动期间将其关闭。如果您禁用了关闭挂钩 (SpringApplication.setRegisterShutdownHook(false) ),它将无法正常工作。

DevTools 需要通过ApplicationContext自定义ResourceLoader. 如果您的应用程序已经提供了一个ApplicationContext,那么它将被包装。将不支持ApplicationContext直接重写方法getResource。

使用 AspectJ 编织时不支持自动重启。

重新启动与重新加载

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

记录条件计算的变化

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

要禁用报告日志记录,请设置以下属性:

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

排除资源

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

如果您想保留这些默认值并添加其他排除项,请改用spring.devtools.restart.additional-exclude属性

监控其他路径

禁用重新启动

如果您不想使用重新启动功能,可以使用spring.devtools.restart.enabled 属性将其禁用。在大多数情况下,您可以在您的application.properties文件中设置此属性(这样做仍然会初始化重新启动类加载器,但它不会监视文件更改)。

如果您需要完全禁用重新启动支持(例如,因为它不适用于特定库),则需要在 SpringApplication.run(…)之前将spring.devtools.restart.enabled System属性设置为false,如以下示例所示:

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

使用触发文件

如果您使用连续编译更改的文件的 IDE,您可能更愿意仅在特定时间触发重新启动。为此,您可以使用“触发文件”,这是一个特殊文件,当您想要实际触发重新启动检查时必须修改该文件。

对文件的任何更新都会触发检查,但只有在 Devtools 检测到有事情要做时才会真正重新启动。

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

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

src
+- main
   +- resources
      +- .reloadtrigger

那么你的trigger-file属性将是:

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

现在只有在更新时才会重新启动src/main/resources/.reloadtrigger。

自定义重启类加载器

默认情况下,IDE 中任何打开的项目都会使用“重新启动”类加载器加载,任何常规.jar文件都会使用“基本”类加载器加载。如果您使用mvn spring-boot:run或者gradle bootRun,情况也是如此:包含@SpringBootApplication的项目使用“重新启动”类加载器加载,其他所有内容都使用“基本”类加载器加载。

您可以通过创建META-INF/spring-devtools.properties文件来指示 Spring Boot 使用不同的类加载器加载项目的部分内容。spring-devtools.properties文件可以包含前缀为restart.exclude和restart.include 的属性。这些include元素是应该被拉入“重新启动”类加载器的项目,这些exclude元素是应该被推入“基本”类加载器的项目。该属性的值是应用于类路径的正则表达式模式,如以下示例所示:

restart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\\.]+\\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\\.]+\\.jar

所有属性键必须是唯一的。只要一个属性以restart.include.或restart.exclude.开始,就会被采纳。

所有META-INF/spring-devtools.properties来自类路径的内容都会被加载。您可以将文件打包到项目内或项目使用的库中。

已知限制

重新启动功能不适用于使用标准ObjectInputStream. 如果您需要反序列化数据,可能需要结合使用Spring的ConfigurableObjectInputStream与Thread.currentThread().getContextClassLoader().

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

6.8.4. 实时重载

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

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

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

6.8.5. 全局设置

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

  1. spring-boot-devtools.properties

  2. spring-boot-devtools.yaml

  3. spring-boot-devtools.yml

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

默认情况下,$HOME是用户的主目录。要自定义此位置,请设置SPRING_DEVTOOLS_HOME环境变量或spring.devtools.home系统属性。

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

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

在 .spring-boot-devtools.properties中激活的任何配置文件都不会影响特定于配置文件的配置文件的加载。 YAML 和 Properties 文件中的配置文件特定文件名(格式为 spring-boot-devtools-.properties)和 spring.config.activate.on-profile文档不受支持。

配置文件系统观察器

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

现在每 2 秒轮询一次受监视的类路径目录是否有更改,并保持 1 秒的安静期以确保没有其他类更改。

6.8.6. 远程应用程序

Spring Boot开发者工具不仅限于本地开发。您还可以在远程运行应用程序时使用多种功能。远程支持是可选的,因为启用它可能会带来安全风险。仅当在受信任的网络上运行或使用 SSL 保护时才应启用它。如果您无法使用这些选项,则不应使用 DevTools 的远程支持。您永远不应该启用对生产部署的支持。

要启用它,您需要确保它devtools包含在重新打包的存档中,如下列表所示:

<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.secret属性。与任何重要的密码或秘密一样,该值应该是唯一且强大的,以便无法猜测或暴力破解。

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

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

运行远程客户端应用程序

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

例如,如果您使用 Eclipse 或 Spring Tools,并且您有一个名为my-app您已部署到 Cloud Foundry 的项目,则您将执行以下操作:

  • 从Run菜单中选择Run Configurations…。

  • 创建一个新的Java Application“启动配置”。

  • 浏览my-app项目。

  • org.springframework.boot.devtools.RemoteSpringApplication作为主类使用。

  • 添加https://myapp.cfapps.io到Program arguments(或任何您的远程 URL)。

正在运行的远程客户端可能类似于以下列表:

  。____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
 \\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
  ' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
 ========|_|==============|___/====================== =============/_/_/_/
 :: Spring Boot 远程 :: (v3.2.0)
​
2023-11-23T13:40:36.387Z INFO 39306 --- [ main] osbdevtools.RemoteSpringApplication :使用 PID 39306 的 Java 17.0.9 启动 RemoteSpringApplication v3.2.0 (/Users/myuser/.m2/repository/org/springframework/ boot/spring-boot-devtools/3.2.0/spring-boot-devtools-3.2.0.jar 由 myuser 在 /opt/apps/ 中启动)
2023-11-23T13:40:36.394Z INFO 39306 --- [ main] osbdevtools.RemoteSpringApplication :没有设置活动配置文件,回退到 1 个默认配置文件:“default”
2023-11-23T13:40:36.794Z INFO 39306 --- [ main] osbdaOptionalLiveReloadServer :LiveReload 服务器正在端口 35729 上运行
2023-11-23T13:40:36.823Z INFO 39306 --- [ main] osbdevtools.RemoteSpringApplication :在 0.923 秒内启动 RemoteSpringApplication (进程运行 1.313)

由于远程客户端使用与真实应用程序相同的类路径,因此它可以直接读取应用程序属性。这就是spring.devtools.remote.secret读取属性并将其传递到服务器进行身份验证的方式。

始终建议使用https://作为连接协议,以便对流量进行加密并且密码无法被拦截。

如果需要使用代理访问远程应用程序,请配置spring.devtools.remote.proxy.host和spring.devtools.remote.proxy.port属性。

远程更新

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

仅当远程客户端运行时才会监视文件。如果在启动远程客户端之前更改文件,则该文件不会推送到远程服务器。

要诊断类加载问题是否确实是由 devtools 及其两个类加载器引起的,。如果这解决了您的问题,以包含您的整个项目。

Spring Boot 支持的一些库使用缓存来提高性能。例如,会缓存编译后的模板,以避免重复解析模板文件。此外,Spring MVC 可以在提供静态资源时向响应添加 HTTP 缓存标头。

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

与 LiveReload 一起使用时,自动重启效果非常好。 。如果您使用 JRebel,则会禁用自动重新启动,以支持动态类重新加载。仍然可以使用其他开发工具功能(例如 LiveReload 和属性覆盖)。

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

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

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

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

某些 IDE 具有使您无需手动更新触发器文件的功能。 和都有这样的支持。使用 Spring Tools,您可以使用控制台视图中的“重新加载”按钮(只要您的trigger-file名称为.reloadtrigger)。对于 IntelliJ IDEA,您可以按照进行操作。

部分所述,重新启动功能是通过使用两个类加载器来实现的。如果这导致问题,您可能需要自定义由哪个类加载器加载的内容。

要在文件更改时触发 LiveReload,必须启用

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

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

相同的方式监视应用程序类路径的更改。任何更新的资源都会被推送到远程应用程序并(如果需要)触发重新启动。如果您迭代使用本地没有的云服务的功能,这会很有帮助。一般来说,远程更新和重新启动比完整的重建和部署周期要快得多。

这通常通过RemoteSpringApplication日志中有关无法上传某些类的警告以及随后的重试来体现。但也可能导致应用代码不一致,第一批变更上传后无法重启。如果您经常观察到此类问题,请尝试将spring.devtools.restart.poll-interval和spring.devtools.restart.quiet-period参数增加到适合您的开发环境的值。有关配置这些属性的信息,请参阅

诊断类加载问题
某个远程开发工具功能
配置任务的类路径以包含developmentOnly配置
如重新启动与重新加载
请尝试禁用 restart
请自定义重新启动类加载器
模板引擎
不需要重新启动应用程序
有关详细信息,请参阅 LiveReload 部分
JRebel 。
实时重新加载
前面描述的
实时重新加载
全局设置
Spring Tools for Eclipse
IntelliJ IDEA(终极版)
其文档中的说明
如前面的“重新启动与重新加载”
自动重新启动。
触发器文件
FileSystemWatcher 的
远程客户端以与本地重新启动
配置文件系统观察器部分。