天天看點

Spring Boot 配置檔案 bootstrap vs application 到底有什麼差別?

用過 Spring Boot 的都知道在 Spring Boot 中有以下兩種配置檔案

bootstrap (.yml 或者 .properties)

application (.yml 或者 .properties)

為什麼會有這兩種配置檔案呢?大家都清楚它們的差別和具體使用場景嗎?

bootstrap/ application 的差別

特意去翻了下 Spring Boot 的官方文檔,沒有找到關于這兩種檔案的具體定義,然後再翻了下 Spring Cloud 的官方文檔找到了它們的差別。

https://cloud.spring.io/spring-cloud-static/Greenwich.SR1/single/spring-cloud.html#_the_bootstrap_application_context

認真閱讀了下文檔,原文大概意思是這樣。

Spring Cloud 建構于 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootstrap, 另外一種是 application, bootstrap 是應用程式的父上下文,也就是說 bootstrap 加載優先于 applicaton。bootstrap 主要用于從額外的資源來加載配置資訊,還可以在本地外部配置檔案中解密屬性。這兩個上下文共用一個環境,它是任何Spring應用程式的外部屬性的來源。bootstrap 裡面的屬性會優先加載,它們預設也不能被本地相同配置覆寫。

是以,對比 application 配置檔案,bootstrap 配置檔案具有以下幾個特性。

boostrap 由父 ApplicationContext 加載,比 applicaton 優先加載

boostrap 裡面的屬性不能被覆寫

bootstrap/ application 的應用場景

application 配置檔案這個容易了解,主要用于 Spring Boot 項目的自動化配置。

bootstrap 配置檔案有以下幾個應用場景。

使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置檔案中添加連接配接到配置中心的配置屬性來加載外部配置中心的配置資訊;

一些固定的不能被覆寫的屬性

一些加密/解密的場景;

以下這個截圖是一個國外網友問了一個 Spring Cloud 工程師得到的回答。

Spring Boot 配置檔案 bootstrap vs application 到底有什麼差別?

做過 Spring Cloud 微服務的朋友應該對 bootstrap 的應用十厘清楚,我們的微信公衆号Java技術棧也有 Spring Cloud 的實戰教程,在 Spring 專題中都能看到。

好了,今天的分享就到這裡,關注Java技術棧微信公衆号,在背景回複:boot,擷取棧長整理的更多的 Spring Boot 教程,都是實戰幹貨,以下僅為部分預覽。

Spring Boot 讀取配置的幾種方式

Spring Boot 如何做參數校驗?

Spring Boot 最核心的 25 個注解!

Spring Boot 2.x 啟動全過程源碼分析

Spring Boot 2.x 新特性總結及遷移指南

……