Spring Boot 配置文件 bootstrap vs application 到底有什麼區別?

用過 Spring Boot 的都知道在 Spring Boot 中有如下兩種配置文件html

  • bootstrap (.yml 或者 .properties)
  • application (.yml 或者 .properties)

爲何會有這兩種配置文件呢?你們都清楚它們的區別和具體使用場景嗎?java

bootstrap/ application 的區別

特地去翻了下 Spring Boot 的官方文檔,沒有找到關於這兩種文件的具體定義,而後再翻了下 Spring Cloud 的官方文檔找到了它們的區別。spring

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

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

Spring Cloud 構建於 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootstrap, 另一種是 application, bootstrap 是應用程序的父上下文,也就是說 bootstrap 加載優先於 applicaton。bootstrap 主要用於從額外的資源來加載配置信息,還能夠在本地外部配置文件中解密屬性。這兩個上下文共用一個環境,它是任何Spring應用程序的外部屬性的來源。bootstrap 裏面的屬性會優先加載,它們默認也不能被本地相同配置覆蓋。app

所以,對比 application 配置文件,bootstrap 配置文件具備如下幾個特性。微服務

  • boostrap 由父 ApplicationContext 加載,比 applicaton 優先加載
  • boostrap 裏面的屬性不能被覆蓋

bootstrap/ application 的應用場景

application 配置文件這個容易理解,主要用於 Spring Boot 項目的自動化配置。源碼分析

bootstrap 配置文件有如下幾個應用場景。加密

  • 使用 Spring Cloud Config 配置中心時,這時須要在 bootstrap 配置文件中添加鏈接到配置中心的配置屬性來加載外部配置中心的配置信息;
  • 一些固定的不能被覆蓋的屬性
  • 一些加密/解密的場景;

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

作過 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 新特性總結及遷移指南
  • ……

本文原創首發於微信公衆號:Java技術棧(id:javastack),轉載請原樣保留本信息。

相關文章
相關標籤/搜索