application.yaml與bootstrap.yaml的使用
application.yaml與bootstrap.yaml
你對(duì)這兩個(gè)文件有沒有清晰認(rèn)識(shí)?
application.yaml
- 用途:主要用于應(yīng)用程序的主要配置,包括數(shù)據(jù)庫連接信息、端口號(hào)、日志級(jí)別、自定義屬性等應(yīng)用級(jí)別的設(shè)置。這是Spring Boot應(yīng)用中最常見的配置文件,幾乎所有自定義配置都會(huì)放在這里。
- 加載時(shí)機(jī):
application.yaml在Spring應(yīng)用上下文初始化之后被加載,這意味著大部分Bean的創(chuàng)建和自動(dòng)配置都會(huì)考慮到這里的配置信息。 - 覆蓋:可以通過命令行參數(shù)、環(huán)境變量、Java系統(tǒng)屬性等方式覆蓋
application.yaml中的配置。
bootstrap.yaml
- 用途:主要用于應(yīng)用程序的引導(dǎo)階段配置,特別是與Spring Cloud相關(guān)的配置,如配置中心(Config Server)的地址。它的內(nèi)容在應(yīng)用程序的上下文初始化之前被加載,適合配置那些需要在Spring應(yīng)用上下文啟動(dòng)之前就需要讀取的屬性,比如用來配置從何處加載主配置文件的地址。
- 加載時(shí)機(jī):
bootstrap.yaml文件比application.yaml更早加載,它在應(yīng)用程序的引導(dǎo)階段就被處理,用于應(yīng)用程序上下文初始化之前的配置,比如配置中心的配置。 - 用途示例:當(dāng)使用Spring Cloud Config Server來集中管理配置時(shí),你需要在
bootstrap.yaml中配置Config Server的地址,這樣Spring Cloud會(huì)先從Config Server獲取配置信息,再初始化Spring Boot應(yīng)用。
這兩大段在講什么 不能簡(jiǎn)單講一下嗎?
知識(shí)儲(chǔ)備
- Bean:實(shí)現(xiàn)控制反轉(zhuǎn)的一個(gè)java對(duì)象 加入到ioc容器當(dāng)中
- Spring上下文:Bean管理 資源訪問 消息傳遞 生命周期管理 我就簡(jiǎn)單講一下第一個(gè)【第一個(gè)最好講】 Bean管理 : ApplicationContext 讀取配置元數(shù)據(jù)(xml文件 java配置 注解 )根據(jù)這些數(shù)據(jù)創(chuàng)建Bean 實(shí)現(xiàn)控制反轉(zhuǎn)
Spring上下文啟動(dòng):加載配置 -》 bean讀取 -》 bean的實(shí)例化 -》 bean的初始化 -》 啟動(dòng)后監(jiān)聽
容器初始化階段(加載配置階段) springboot 會(huì)讀取 application.yaml 文件
bootstrap.yaml 文件在加載配置階段前 就已經(jīng)讀取了
bootstrap.yaml 更早加載,主要用于引導(dǎo)配置,影響整個(gè)應(yīng)用的初始化;而 application.yaml 加載較晚,負(fù)責(zé)應(yīng)用的主體配置,靈活性和可覆蓋性更高。
我們來舉例
bootstrap配置文件在Spring Boot應(yīng)用的啟動(dòng)過程中比application配置文件具有更高的優(yōu)先級(jí)。
這意味著在應(yīng)用初始化的最早階段,Spring會(huì)先讀取bootstrap文件中的配置。
由于Nacos作為配置中心,負(fù)責(zé)提供應(yīng)用運(yùn)行時(shí)所需的配置信息,將其地址放在bootstrap中可以確保應(yīng)用在加載其他任何配置或初始化Bean之前就能建立起與Nacos的連接,從而能夠及時(shí)獲取到所有必需的配置。
server:
port: 3000 # 前端默認(rèn)訪問端口號(hào)為3000
servlet:
context-path: / # 前端默認(rèn)訪問的根路徑
spring:
application:
name: gateway-service # 程序名就是服務(wù)名
cloud:
nacos:
server-addr: 174.148.4.170:8848 #注冊(cè)中心當(dāng)然還有其他原因:
- 功能隔離:
bootstrap配置主要用于應(yīng)用程序的引導(dǎo)階段,它配置的內(nèi)容是用來引導(dǎo)Spring Boot應(yīng)用上下文的創(chuàng)建,比如配置中心的地址、安全證書、加密解密的密鑰等基礎(chǔ)設(shè)施級(jí)別的設(shè)置。而application配置則是關(guān)于應(yīng)用本身的業(yè)務(wù)邏輯和特性配置。將Nacos地址這樣的基礎(chǔ)設(shè)施配置與業(yè)務(wù)邏輯配置分離開來,有助于清晰地組織配置,同時(shí)也便于管理和維護(hù)。 - 安全性與穩(wěn)定性:將與配置中心通信的敏感信息和基礎(chǔ)配置放在
bootstrap中,可以減少這些關(guān)鍵信息被不當(dāng)覆蓋的風(fēng)險(xiǎn),因?yàn)?code>bootstrap的配置不容易被外部環(huán)境變量或其他配置源所覆蓋。這對(duì)于生產(chǎn)環(huán)境尤其重要,保證了系統(tǒng)的穩(wěn)定性和安全性。 - 避免循環(huán)依賴:如果Nacos配置包含了應(yīng)用運(yùn)行所必需的參數(shù)(比如數(shù)據(jù)庫連接字符串),而這些參數(shù)又存儲(chǔ)在Nacos中,那么必須在應(yīng)用啟動(dòng)時(shí)就正確設(shè)置Nacos的地址以獲取這些參數(shù),避免因配置加載順序?qū)е碌臐撛谘h(huán)依賴問題
在來看一下3: 想象一下,你的Spring Boot應(yīng)用需要從Nacos獲取數(shù)據(jù)庫連接字符串等關(guān)鍵配置來初始化數(shù)據(jù)庫訪問組件(如DataSource)。然而,這些數(shù)據(jù)庫連接信息實(shí)際上是存儲(chǔ)在Nacos中的。
這就形成了一個(gè)邏輯上的依賴鏈:應(yīng)用啟動(dòng) -> 連接Nacos -> 獲取數(shù)據(jù)庫配置 -> 初始化數(shù)據(jù)庫連接。如果Nacos的地址或者連接Nacos所需的其他關(guān)鍵參數(shù)(如認(rèn)證信息)也打算通過Nacos來管理,那么就會(huì)出現(xiàn)問題,因?yàn)檫@時(shí)應(yīng)用在沒有Nacos配置的情況下無法知道如何連接到Nacos以獲取這些配置信息,形成了一種“雞生蛋,蛋生雞”的困境,即循環(huán)依賴。
總結(jié)
看到這你應(yīng)該清楚了 哪些應(yīng)該寫在bootstrap.yaml 哪些應(yīng)該寫在application.yaml 里面
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring計(jì)時(shí)器StopWatch的具體使用
本文主要介紹了Spring計(jì)時(shí)器StopWatch的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Java gRPC攔截器簡(jiǎn)單實(shí)現(xiàn)分布式日志鏈路追蹤器過程詳解
有請(qǐng)求的發(fā)送、處理,當(dāng)然就會(huì)有攔截器的需求,例如在服務(wù)端通過攔截器統(tǒng)一進(jìn)行請(qǐng)求認(rèn)證等操作,這些就需要攔截器來完成,今天松哥先和小伙伴們來聊一聊gRPC中攔截器的基本用法,后面我再整一篇文章和小伙伴們做一個(gè)基于攔截器實(shí)現(xiàn)的JWT認(rèn)證的gRPC2023-03-03
springboot @RequiredArgsConstructor的概念與使用方式
這篇文章主要介紹了springboot @RequiredArgsConstructor的概念與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
mybatis 根據(jù)id批量刪除的實(shí)現(xiàn)操作
這篇文章主要介紹了mybatis 根據(jù)id批量刪除的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
解決weblogic部署springboot項(xiàng)目步驟及可能會(huì)出現(xiàn)的問題
這篇文章主要介紹了解決weblogic部署springboot項(xiàng)目步驟及可能會(huì)出現(xiàn)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
IDEA中Maven依賴包無法下載或?qū)氲慕鉀Q方案(系統(tǒng)缺失文件導(dǎo)致)
在配置Maven環(huán)境時(shí),可能會(huì)遇到各種報(bào)錯(cuò)問題,首先確保Maven路徑配置正確,例如使用apache-maven-3.5.0版本,則需要在系統(tǒng)環(huán)境變量的Path中添加其bin目錄路徑,并上移優(yōu)先級(jí),接下來,在Maven的conf目錄下修改settings.xml文件,將鏡像源改為阿里云2024-09-09
Spring Validation中9個(gè)數(shù)據(jù)校驗(yàn)工具使用指南
Spring Validation作為Spring生態(tài)系統(tǒng)的重要組成部分,提供了一套強(qiáng)大而靈活的數(shù)據(jù)校驗(yàn)機(jī)制,本文給大家介紹了Spring Validation中9個(gè)數(shù)據(jù)校驗(yàn)工具的使用指南,需要的朋友可以參考下2025-05-05

