在 Spring Cloud 应用程序中,bootstrap.yaml(或bootstrap.properties)的使用并非强制性的,但它扮演着一个特定的角色,主要是因为 Spring Cloud 的设计和工作流程。
背景和设计
Spring Cloud 构建在 Spring Boot 之上,提供了用于开发分布式系统中常见模式的工具,如配置管理、服务发现、断路器等。为了实现这些功能,Spring Cloud 需要在应用程序的正常启动流程之前读取配置信息,比如从配置服务器获取配置或设置服务发现客户端。
bootstrap 上下文的角色
- 早期配置加载:
bootstrap.yaml用于在应用程序的ApplicationContext创建之前加载配置信息,创建一个“bootstrap”上下文。这个上下文负责从外部源加载配置(例如,配置服务器)并使其在主应用程序上下文启动之前可用。 - 应用程序上下文与Bootstrap上下文:Bootstrap上下文是父上下文,而应用程序上下文是它的子上下文。这意味着在bootstrap上下文中定义的任何配置都会优先于应用程序上下文中的配置。
官方文档和实践
虽然 Spring Cloud 文档提到了 bootstrap.yaml 的使用,但并没有强制规定所有的配置都必须放在这里。bootstrap.yaml 的使用主要是由于上述设计决定,这是为了满足特定的技术需求,如动态配置更新、密钥管理等。
Spring Cloud 2020.0.0(也称为 Ilford)及更新版本的变化
值得注意的是,从 Spring Cloud 2020.0.0 开始,Spring Cloud 引入了新的配置处理方式,这可能改变了 bootstrap.yaml 的使用。在这个和后续版本中,可以通过 Spring Boot 的原生配置文件(application.yaml或application.properties)管理早期配置,使用新的属性加载机制。这是通过设置spring.config.import属性来实现的,可以指定配置服务器等外部配置源。
结论
bootstrap.yaml 的使用是基于 Spring Cloud 对特定配置管理需求的解决方案。虽然不是强制性的,但它在早期配置加载和特定Spring Cloud 功能(如配置刷新)中发挥着关键作用。随着 Spring Cloud 的发展,这些实践可能会发生变化,建议查阅最新的 Spring Cloud 文档以获取当前的最佳实践。

