SpringBoot項目中application.yml和bootstrap.yml文件的區(qū)別及說明
application.yml和bootstrap.yml文件的區(qū)別
application.yml
和 bootstrap.yml
文件都是 Spring Boot 項目中用于配置應(yīng)用程序的 YAML 或 Properties 文件,但它們在加載順序、用途和優(yōu)先級上存在關(guān)鍵的區(qū)別。
核心區(qū)別概覽:
特性 | bootstrap.yml / bootstrap.properties | application.yml / application.properties |
---|---|---|
加載時機 | 更早 (Bootstrap Context) | 較晚 (Application Context) |
用途 | 引導(dǎo)引導(dǎo) (Bootstrapping), 外部化配置 | 應(yīng)用程序通用配置 |
上下文 | Bootstrap Context | Application Context |
優(yōu)先級 | 更高 (在 Bootstrap Context 中) | 較低 (在 Application Context 中) |
配置來源 | 外部配置 (Config Server, Nacos, etc.) | 應(yīng)用自身配置 (本地文件, 命令行, 環(huán)境變量) |
適用場景 | 配置中心連接、共享配置、應(yīng)用名、Profile | 應(yīng)用通用配置、Bean 定義、業(yè)務(wù)邏輯配置 |
配置覆蓋 | application.yml 覆蓋 bootstrap.yml | 命令行參數(shù)、環(huán)境變量等覆蓋 application.yml |
默認(rèn)位置 | src/main/resources/ | src/main/resources/ |
是否必須存在 | 可選 | 可選 (但通常存在) |
詳細(xì)解釋和區(qū)別:
1. 加載時機 (Loading Order)
bootstrap.yml
/bootstrap.properties
(Bootstrap Context): 在 Spring Boot 應(yīng)用程序啟動的非常早期階段加載。 這是通過 Bootstrap Context 實現(xiàn)的,它是一個特殊的父級 Spring 上下文,在主 Application Context 之前創(chuàng)建。application.yml
/application.properties
(Application Context): 在bootstrap.yml
加載之后,在 Application Context 初始化時加載。 這是 Spring Boot 應(yīng)用的主上下文。
理解 Bootstrap Context 和 Application Context:
你可以將 Bootstrap Context 理解為 Spring Boot 啟動的引導(dǎo)階段,它負(fù)責(zé)初始化一些基礎(chǔ)且關(guān)鍵的配置,例如:
- 配置 Spring Cloud Config Client 或 Nacos Config Client 的連接信息: Bootstrap Context 需要先知道如何連接配置中心,才能加載外部化配置。
- 加載共享配置: 在多個應(yīng)用之間共享的配置通常需要在 Bootstrap Context 中加載,以便在應(yīng)用啟動的早期階段就可用。
- 設(shè)置
spring.application.name
和spring.profiles.active
等基礎(chǔ)屬性: 這些屬性通常需要在 Bootstrap Context 中確定,以便后續(xù)的配置加載和應(yīng)用初始化能夠正確進行。
Application Context 則是 Spring Boot 應(yīng)用的主應(yīng)用上下文,負(fù)責(zé)加載和管理應(yīng)用程序中的所有 Bean、處理請求、執(zhí)行業(yè)務(wù)邏輯等。 application.yml
主要用于配置應(yīng)用程序自身的通用設(shè)置。
2. 用途 (Purpose)
bootstrap.yml
/ bootstrap.properties
: 引導(dǎo)引導(dǎo) (Bootstrapping) 和 外部化配置:
- 配置 Spring Cloud Config Client 或 Nacos Config Client: 例如
spring.cloud.config.uri
或spring.cloud.nacos.config.server-addr
等配置。 - 加載共享配置 (
sharedConfigs
): 使用 Spring Cloud Alibaba Nacos Config 的sharedConfigs
功能時,需要在bootstrap.yml
中配置。 - 配置應(yīng)用程序名稱 (
spring.application.name
): 通常在bootstrap.yml
中設(shè)置,用于標(biāo)識應(yīng)用,方便配置中心識別。 - 激活 Profile (
spring.profiles.active
): 在bootstrap.yml
中激活 Profile,可以影響后續(xù)的配置加載。 - 其他需要在應(yīng)用啟動早期就加載的配置: 例如,一些自定義的 Bootstrap 監(jiān)聽器或初始化器需要的配置。
application.yml
/ application.properties
: 應(yīng)用程序通用配置:
- 應(yīng)用程序自身的通用配置: 例如,端口號、數(shù)據(jù)源連接信息 (如果不是共享的)、日志級別、國際化配置、Thymeleaf 模板配置、Spring MVC 配置、Bean 的定義等。
- 業(yè)務(wù)邏輯相關(guān)的配置: 例如,一些業(yè)務(wù)開關(guān)、參數(shù)配置等。
- 大部分應(yīng)用程序的配置都應(yīng)該放在
application.yml
中。
3. 上下文 (Context)
bootstrap.yml
/bootstrap.properties
: Bootstrap Contextapplication.yml
/application.properties
: Application Context
這意味著 bootstrap.yml
中的配置主要作用于 Bootstrap Context,而 application.yml
中的配置作用于 Application Context。 Bootstrap Context 的配置會影響 Application Context 的創(chuàng)建和初始化。
4. 優(yōu)先級 (Priority)
bootstrap.yml
/bootstrap.properties
的優(yōu)先級更高 (在 Bootstrap Context 中): Bootstrap Context 的配置會優(yōu)先加載,并影響 Application Context 的創(chuàng)建。application.yml
/application.properties
的優(yōu)先級較低 (在 Application Context 中): Application Context 的配置在 Bootstrap Context 之后加載。
5. 配置來源 (Configuration Sources)
bootstrap.yml
/bootstrap.properties
: 傾向于配置外部配置來源**,例如 Spring Cloud Config Server, Nacos Config Server 等。 也用于配置一些需要在引導(dǎo)階段就確定的基礎(chǔ)屬性。application.yml
/application.properties
: 主要用于配置應(yīng)用自身**的配置,通常來源于本地文件系統(tǒng)、命令行參數(shù)、環(huán)境變量等。
6. 適用場景 (Use Cases)
bootstrap.yml
/ bootstrap.properties
: 適用于:
- 配置 Spring Cloud Config 或 Nacos Config Client 連接信息。
- 配置
sharedConfigs
(Nacos Config)。 - 設(shè)置
spring.application.name
和spring.profiles.active
。 - 配置需要在 Bootstrap Context 中使用的屬性。
application.yml
/ application.properties
: 適用于:
- 配置應(yīng)用程序的通用設(shè)置。
- 定義 Bean。
- 配置業(yè)務(wù)邏輯相關(guān)的參數(shù)。
- 大部分應(yīng)用程序的配置。
7. 配置覆蓋 (Configuration Overriding)
application.yml
中的配置會覆蓋 bootstrap.yml
中相同屬性的配置。 這是因為 application.yml
在 bootstrap.yml
之后加載。
命令行參數(shù)、環(huán)境變量等 可以進一步覆蓋 application.yml
和 bootstrap.yml
中的配置。 Spring Boot 的配置優(yōu)先級順序是:
- 命令行參數(shù)
- 環(huán)境變量
application.yml
/application.properties
(profile-specific 和 default)bootstrap.yml
/bootstrap.properties
(profile-specific 和 default)- 默認(rèn)配置 (Spring Boot 框架內(nèi)部的默認(rèn)值)
8. 默認(rèn)位置 (Default Location)
application.yml
和bootstrap.yml
的默認(rèn)位置都是src/main/resources/
目錄下。
9. 是否必須存在 (Required or Optional)
application.yml
和bootstrap.yml
都不是必須存在的。 Spring Boot 應(yīng)用在沒有這些配置文件的情況下也可以啟動,它會使用默認(rèn)配置。- 然而,在實際開發(fā)中,為了進行各種自定義配置,
application.yml
(或application.properties
) 通常是必需存在的。bootstrap.yml
(或bootstrap.properties
) 則在需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理時才常用。
總結(jié)
- 如果你不需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,那么你可能只需要
application.yml
(或application.properties
) 文件。 大部分應(yīng)用程序的配置都放在application.yml
中即可。 - 如果你需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,或者需要在應(yīng)用啟動的早期階段加載一些關(guān)鍵配置 (例如共享配置、應(yīng)用名、Profile 等),那么你就需要使用
bootstrap.yml
(或bootstrap.properties
) 文件。bootstrap.yml
主要用于配置引導(dǎo)階段的配置,以及外部化配置的連接信息和共享配置。
簡單記憶口訣:
- Bootstrap 先行,Application 后續(xù):
bootstrap.yml
先加載,application.yml
后加載。 - Bootstrap 引導(dǎo),Application 應(yīng)用:
bootstrap.yml
負(fù)責(zé)引導(dǎo)啟動,application.yml
負(fù)責(zé)應(yīng)用配置。 - Bootstrap 外部,Application 自身:
bootstrap.yml
配置外部配置,application.yml
配置自身應(yīng)用。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVAWEB實現(xiàn)簡單的商城項目(一)實例代碼解析
本文給大家分享一段實例代碼給大家介紹JAVAWEB實現(xiàn)簡單的商城項目(一),非常具有參考價值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02從dubbo zookeeper注冊地址提取出zookeeper地址的方法
今天小編就為大家分享一篇關(guān)于從dubbo zookeeper注冊地址提取出zookeeper地址的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12