在 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 文档以获取当前的最佳实践。