最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot配置文件優(yōu)先級(jí)用法及解讀

 更新時(shí)間:2025年07月21日 09:47:34   作者:壞貓警長(zhǎng)  
SpringBoot配置優(yōu)先級(jí)按來(lái)源排序,15種類型中命令行參數(shù)最高,配置文件次之,classpath下config目錄的配置優(yōu)先級(jí)高于jar內(nèi)文件,配置中心如Nacos的配置則插入列表前端,所有配置最終存入Environment的propertySources,通過(guò)順序遍歷實(shí)現(xiàn)覆蓋

SpringBoot配置文件優(yōu)先級(jí)

SpringBoot官方文檔對(duì)配置文件優(yōu)先級(jí)有以下介紹,一共15種配置,從15到1為優(yōu)先級(jí)由高到低排列。

其中較為常用的如:11.命令行參數(shù)>5.系統(tǒng)環(huán)境變量>3.配置文件

其中3.配置文件按類型優(yōu)先級(jí)由高到低又依次是:

jar包外部指定的配置如外部的application-prod.properties/yaml

  • >jar包外部普通配置文件如外部的application.properties/yaml
  • >內(nèi)部指定配置文件 > 內(nèi)部普通配置文件

我們實(shí)際項(xiàng)目中經(jīng)常用高優(yōu)先級(jí)的配置來(lái)覆蓋低優(yōu)先級(jí)的配置,可以達(dá)到區(qū)分開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境的效果:

其實(shí)以上的優(yōu)先級(jí)介紹并沒(méi)有覆蓋所有的配置文件類型和配置形式,譬如我們還可以在classpath的config目錄中放一個(gè)application.yaml,這個(gè)文件的優(yōu)先級(jí)應(yīng)該在哪個(gè)位置呢?

如果我們使用了如nacos這種配置中心,配置中心里的配置又應(yīng)該在以上優(yōu)先級(jí)的哪個(gè)位置呢?

我們可以從源碼的角度來(lái)簡(jiǎn)單了解一下

SpringBoot對(duì)配置文件的優(yōu)先級(jí)控制。

我們項(xiàng)目中的各種配置在SpringBoot啟動(dòng)時(shí)會(huì)被以各種方式讀取加載,雖然來(lái)源不同,但是所有的配置最終都會(huì)被保存在Environment對(duì)象的propertySources屬性中,如下圖:

來(lái)自各個(gè)地方的配置,最終都存在了這個(gè)List中,所以我們會(huì)得到一個(gè)有序的配置文件列表,其中每一個(gè)元素對(duì)應(yīng)一個(gè)配置文件。

這里注意一點(diǎn),所謂的高優(yōu)先級(jí)覆蓋低優(yōu)先級(jí)這種說(shuō)法是有歧義的,低優(yōu)先級(jí)的配置并不是被覆蓋了,而是也會(huì)原樣保存在這個(gè)List當(dāng)中,但是其位置會(huì)相對(duì)靠后。

然后我們很自然的就會(huì)想到,項(xiàng)目里獲取配置數(shù)據(jù)應(yīng)該有個(gè)通用的邏輯才對(duì),就是順序遍歷這個(gè)List中的元素,按key查找,找到了就返回,找不到再繼續(xù)到下一個(gè)配置文件里找。

也就是如下代碼:

如果要向這個(gè)配置列表里加入配置也并不麻煩,可以參考如下代碼:

public static void main(String[] args) {
   ConfigurableApplicationContext applicationContext = SpringApplication.run(SB.class, args);
   ConfigurableEnvironment environment = applicationContext.getEnvironment();
   MutablePropertySources propertySources = environment.getPropertySources();
   Map<String, Object> lastMap = new HashMap<>();
   lastMap.put("testLast", "last");
   propertySources.addLast(new MapPropertySource("lastMap", lastMap));
   String last = environment.getProperty("testLast");
   log.info("啟動(dòng)成功!");
}

所以其實(shí)一共有幾種類型的配置文件并不確定,我們可以自行增加,如果項(xiàng)目使用了配置中心,可以查看到其配置數(shù)據(jù)在List中的位置相對(duì)靠前,也就是為什么我們配置中心里的配置優(yōu)先級(jí)高于jar包中的配置。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?項(xiàng)目中使用遞歸的小結(jié)

    Java?項(xiàng)目中使用遞歸的小結(jié)

    在 Java 中,遞歸是指在方法的定義中調(diào)用自身的過(guò)程,遞歸是基于方法調(diào)用棧的原理實(shí)現(xiàn)的:當(dāng)一個(gè)方法被調(diào)用時(shí),會(huì)在調(diào)用棧中創(chuàng)建一個(gè)對(duì)應(yīng)的棧幀,包含方法的參數(shù)、局部變量和返回地址等信息,這篇文章主要介紹了Java?項(xiàng)目中對(duì)使用遞歸的理解分享,需要的朋友可以參考下
    2024-07-07
  • 使用@RequestBody 接收復(fù)雜實(shí)體類集合

    使用@RequestBody 接收復(fù)雜實(shí)體類集合

    這篇文章主要介紹了使用@RequestBody 接收復(fù)雜實(shí)體類集合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring注解之@Import注解的使用和源碼分析

    Spring注解之@Import注解的使用和源碼分析

    今天主要介紹Spring @Import注解,在Spring中@Import使用得比較頻繁,它得作用是導(dǎo)入bean,具體的導(dǎo)入方式有多種,特別在SpringBoot項(xiàng)目中,很多地方都使用到了@Import注解,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • Java二維數(shù)組與稀疏數(shù)組相互轉(zhuǎn)換實(shí)現(xiàn)詳解

    Java二維數(shù)組與稀疏數(shù)組相互轉(zhuǎn)換實(shí)現(xiàn)詳解

    在某些應(yīng)用場(chǎng)景中需要大量的二維數(shù)組來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),但是二維數(shù)組中卻有著大量的無(wú)用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間
    2022-09-09
  • springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法

    springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法

    這篇文章主要介紹了springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(63)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(63)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-08-08
  • Java中的RPC框架Dubbo原理和機(jī)制詳解

    Java中的RPC框架Dubbo原理和機(jī)制詳解

    這篇文章主要介紹了Java中的RPC框架Dubbo原理和機(jī)制詳解,Dubbo 是一款Java RPC框架,致力于提供高性能的 RPC 遠(yuǎn)程服務(wù)調(diào)用方案,作為主流的微服務(wù)框架之一,Dubbo 為開(kāi)發(fā)人員帶來(lái)了非常多的便利,需要的朋友可以參考下
    2024-01-01
  • 使用okhttp替換Feign默認(rèn)Client的操作

    使用okhttp替換Feign默認(rèn)Client的操作

    這篇文章主要介紹了使用okhttp替換Feign默認(rèn)Client的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Springboot?hibernate-validator?6.x快速校驗(yàn)示例代碼

    Springboot?hibernate-validator?6.x快速校驗(yàn)示例代碼

    這篇文章主要介紹了Springboot?hibernate-validator?6.x校驗(yàn),本文以6.2.1.Final版本為例解決了log4j版本的漏洞問(wèn)題,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • 詳解Java中字符串緩沖區(qū)StringBuffer類的使用

    詳解Java中字符串緩沖區(qū)StringBuffer類的使用

    StringBuffer與String類似,只不過(guò)StringBuffer在進(jìn)行字符串處理時(shí)不生成新的對(duì)象,下面我們就來(lái)詳解Java中字符串緩沖區(qū)StringBuffer類的使用:
    2016-06-06

最新評(píng)論

郑州市| 桐柏县| 兴化市| 昂仁县| 忻城县| 南开区| 静乐县| 古浪县| 淮北市| 大悟县| 龙口市| 邢台县| 东乡族自治县| 麻城市| 婺源县| 乌拉特后旗| 夏津县| 桐城市| 永靖县| 平南县| 四会市| 淄博市| 静海县| 周口市| 嘉峪关市| 芦山县| 姜堰市| 广元市| 兴安县| 托克托县| 乐至县| 台南县| 永福县| 惠水县| 罗源县| 城口县| 鹿泉市| 吕梁市| 辽宁省| 公安县| 新宁县|