-
今天在维护以前的项目的时候,发现Spring Boot的配置文件从application变成了bootstrap,以我对bootstrap的理解,它应该是一个前端用的响应式布局框架呀,怎么会变成了后端的配置文件了啦
-
我就问了一下同事和百度,总结了对bootstrap配置文件的理解:
-
基于 Spring Boot 构建 Spring Cloud 应用时,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application,因此也就有如下两类核心配置文件:
bootstrap (.yml 或者 .properties) 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 加载优先于 applicaton。 bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何 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 回答截图如下:
------完------