基于 Spring Boot 构建 Spring Cloud 应用时,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application,因此也就有如下两类核心配置文件:

阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进【七日书摘】微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
七日书摘官方群.jpg

  1. bootstrap (.yml 或者 .properties)
  2. application (.yml 或者 .properties)

相信看到这里大家就有点懵圈了,究其原因大家在使用 Spring Boot 开发项目的过程中也都非常清楚, Spring Boot 项目开发中核心的配置文件就只用到了 application (.yml 或者 .properties),而且如果有对 Spring Boot 官方文档熟悉的童鞋也一定会说, Spring Boot 官方文档中并未有 bootstrap (.yml 或者 .properties) 配置文件的介绍。

那为什么会有这两种配置文件的存在呢?大家是否又都清楚它们的区别和具体使用场景呢?

bootstrap & application的区别

要找到 bootstrap & application 的区别,首要的就是去 Spring Boot 官方文档中去寻找答案,前面已经说了,Spring Boot 官方文档中并未有 bootstrap (.yml 或者 .properties) 配置文件的介绍。这是由于 bootstrap (.yml 或者 .properties) 配置文件的介绍在 Spring Cloud 文档中,具体出处在 the-bootstrap-application-context

原文的主旨意思如下:

基于 Spring Boot 构建的 Spring Cloud 应用程序,会创建一个 bootstrap 上下文环境, 它是有别于 Spring Boot 自身的 application 上下文环境。bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicatonbootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何 Spring 应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

对比 application 配置文件,bootstrap 配置文件具有以下几个特性:

  1. boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
  2. boostrap 里面的属性不能被覆盖

bootstrap & application 配置文件的应用场景

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景:

  1. 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
  2. 一些固定的不能被覆盖的属性
  3. 一些加密/解密的场景;

扩展阅读:
在 stackoverflow 上,针对 Spring Boot 核心配置文件bootstrap & application 有两篇不错的回答附上。
Settings in application.yml for spring.cloud.config aren't used when app is executing
回答截图如下:
Andonaeus.jpg

What is the difference between putting a property on application.yml or bootstrap.yml in spring boot?
回答截图如下:
Michael Isvy.jpg

------完------

更多学习讨论欢迎进入七日书摘官方群: 七日书摘官方群

七日书摘官方群群聊二维码.png

参考文章:
Spring Boot 核心配置文件详解

https://cloud.spring.io/spring-cloud-static/spring-cloud-commons/2.2.1.RELEASE/reference/html/#the-bootstrap-application-context