SpringBoot項(xiàng)目中application.yml和bootstrap.yml文件的區(qū)別及說明
application.yml和bootstrap.yml文件的區(qū)別
application.yml
和 bootstrap.yml
文件都是 Spring Boot 項(xiàng)目中用于配置應(yīng)用程序的 YAML 或 Properties 文件,但它們?cè)?strong>加載順序、用途和優(yōu)先級(jí)上存在關(guān)鍵的區(qū)別。
核心區(qū)別概覽:
特性 | bootstrap.yml / bootstrap.properties | application.yml / application.properties |
---|---|---|
加載時(shí)機(jī) | 更早 (Bootstrap Context) | 較晚 (Application Context) |
用途 | 引導(dǎo)引導(dǎo) (Bootstrapping), 外部化配置 | 應(yīng)用程序通用配置 |
上下文 | Bootstrap Context | Application Context |
優(yōu)先級(jí) | 更高 (在 Bootstrap Context 中) | 較低 (在 Application Context 中) |
配置來源 | 外部配置 (Config Server, Nacos, etc.) | 應(yīng)用自身配置 (本地文件, 命令行, 環(huán)境變量) |
適用場(chǎng)景 | 配置中心連接、共享配置、應(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. 加載時(shí)機(jī) (Loading Order)
bootstrap.yml
/bootstrap.properties
(Bootstrap Context): 在 Spring Boot 應(yīng)用程序啟動(dòng)的非常早期階段加載。 這是通過 Bootstrap Context 實(shí)現(xiàn)的,它是一個(gè)特殊的父級(jí) Spring 上下文,在主 Application Context 之前創(chuàng)建。application.yml
/application.properties
(Application Context): 在bootstrap.yml
加載之后,在 Application Context 初始化時(shí)加載。 這是 Spring Boot 應(yīng)用的主上下文。
理解 Bootstrap Context 和 Application Context:
你可以將 Bootstrap Context 理解為 Spring Boot 啟動(dòng)的引導(dǎo)階段,它負(fù)責(zé)初始化一些基礎(chǔ)且關(guān)鍵的配置,例如:
- 配置 Spring Cloud Config Client 或 Nacos Config Client 的連接信息: Bootstrap Context 需要先知道如何連接配置中心,才能加載外部化配置。
- 加載共享配置: 在多個(gè)應(yīng)用之間共享的配置通常需要在 Bootstrap Context 中加載,以便在應(yīng)用啟動(dòng)的早期階段就可用。
- 設(shè)置
spring.application.name
和spring.profiles.active
等基礎(chǔ)屬性: 這些屬性通常需要在 Bootstrap Context 中確定,以便后續(xù)的配置加載和應(yīng)用初始化能夠正確進(jìn)行。
Application Context 則是 Spring Boot 應(yīng)用的主應(yīng)用上下文,負(fù)責(zé)加載和管理應(yīng)用程序中的所有 Bean、處理請(qǐng)求、執(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
功能時(shí),需要在bootstrap.yml
中配置。 - 配置應(yīng)用程序名稱 (
spring.application.name
): 通常在bootstrap.yml
中設(shè)置,用于標(biāo)識(shí)應(yīng)用,方便配置中心識(shí)別。 - 激活 Profile (
spring.profiles.active
): 在bootstrap.yml
中激活 Profile,可以影響后續(xù)的配置加載。 - 其他需要在應(yīng)用啟動(dòng)早期就加載的配置: 例如,一些自定義的 Bootstrap 監(jiān)聽器或初始化器需要的配置。
application.yml
/ application.properties
: 應(yīng)用程序通用配置:
- 應(yīng)用程序自身的通用配置: 例如,端口號(hào)、數(shù)據(jù)源連接信息 (如果不是共享的)、日志級(jí)別、國(guó)際化配置、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 的配置會(huì)影響 Application Context 的創(chuàng)建和初始化。
4. 優(yōu)先級(jí) (Priority)
bootstrap.yml
/bootstrap.properties
的優(yōu)先級(jí)更高 (在 Bootstrap Context 中): Bootstrap Context 的配置會(huì)優(yōu)先加載,并影響 Application Context 的創(chuàng)建。application.yml
/application.properties
的優(yōu)先級(jí)較低 (在 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. 適用場(chǎng)景 (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
中的配置會(huì)覆蓋 bootstrap.yml
中相同屬性的配置。 這是因?yàn)?application.yml
在 bootstrap.yml
之后加載。
命令行參數(shù)、環(huán)境變量等 可以進(jìn)一步覆蓋 application.yml
和 bootstrap.yml
中的配置。 Spring Boot 的配置優(yōu)先級(jí)順序是:
- 命令行參數(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)用在沒有這些配置文件的情況下也可以啟動(dòng),它會(huì)使用默認(rèn)配置。- 然而,在實(shí)際開發(fā)中,為了進(jìn)行各種自定義配置,
application.yml
(或application.properties
) 通常是必需存在的。bootstrap.yml
(或bootstrap.properties
) 則在需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理時(shí)才常用。
總結(jié)
- 如果你不需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,那么你可能只需要
application.yml
(或application.properties
) 文件。 大部分應(yīng)用程序的配置都放在application.yml
中即可。 - 如果你需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,或者需要在應(yīng)用啟動(dòng)的早期階段加載一些關(guān)鍵配置 (例如共享配置、應(yīng)用名、Profile 等),那么你就需要使用
bootstrap.yml
(或bootstrap.properties
) 文件。bootstrap.yml
主要用于配置引導(dǎo)階段的配置,以及外部化配置的連接信息和共享配置。
簡(jiǎn)單記憶口訣:
- Bootstrap 先行,Application 后續(xù):
bootstrap.yml
先加載,application.yml
后加載。 - Bootstrap 引導(dǎo),Application 應(yīng)用:
bootstrap.yml
負(fù)責(zé)引導(dǎo)啟動(dòng),application.yml
負(fù)責(zé)應(yīng)用配置。 - Bootstrap 外部,Application 自身:
bootstrap.yml
配置外部配置,application.yml
配置自身應(yīng)用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVAWEB實(shí)現(xiàn)簡(jiǎn)單的商城項(xiàng)目(一)實(shí)例代碼解析
本文給大家分享一段實(shí)例代碼給大家介紹JAVAWEB實(shí)現(xiàn)簡(jiǎn)單的商城項(xiàng)目(一),非常具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02SpringBoot2入門自動(dòng)配置原理及源碼分析
這篇文章主要為大家介紹了SpringBoot2入門自動(dòng)配置原理及源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法
今天小編就為大家分享一篇關(guān)于從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12