欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

我們可以從源碼的角度來簡單了解一下

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

我們項目中的各種配置在SpringBoot啟動時會被以各種方式讀取加載,雖然來源不同,但是所有的配置最終都會被保存在Environment對象的propertySources屬性中,如下圖:

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

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

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

也就是如下代碼:

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

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("啟動成功!");
}

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

總結(jié)

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

相關(guān)文章

  • ImportBeanDefinitionRegistrar手動控制BeanDefinition創(chuàng)建注冊詳解

    ImportBeanDefinitionRegistrar手動控制BeanDefinition創(chuàng)建注冊詳解

    這篇文章主要為大家介紹了ImportBeanDefinitionRegistrar手動控制BeanDefinition創(chuàng)建注冊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Java對象字段拷貝最佳實踐分享

    Java對象字段拷貝最佳實踐分享

    文章介紹了幾種常見的對象字段拷貝方法,包括手動set、BeanUtils.copyProperties、Lombok的@Builder和MapStruct,每種方法都有其優(yōu)缺點和適用場景,推薦使用MapStruct,因為它在編譯期生成代碼,性能最優(yōu),支持復(fù)雜對象映射,需要的朋友可以參考下
    2025-03-03
  • java實現(xiàn)簡易的學(xué)籍管理系統(tǒng)

    java實現(xiàn)簡易的學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡易的學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java實現(xiàn)小型圖書館管理系統(tǒng)

    Java實現(xiàn)小型圖書館管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)小型圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Mybatis框架之工廠模式(Factory Pattern)

    Mybatis框架之工廠模式(Factory Pattern)

    MyBatis中使用工廠模式來管理和創(chuàng)建SqlSession對象,從而簡化數(shù)據(jù)庫訪問的配置和管理過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之快速冪的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之快速冪的實現(xiàn)

    快速冪是用來解決求冪運算的高效方式。本文將詳細為大家介紹如何利用Java實現(xiàn)快速冪,以及利用快速冪求解冪運算問題,需要的可以參考一下
    2022-03-03
  • mybatis自動掃描和自定義類注解方式

    mybatis自動掃描和自定義類注解方式

    這篇文章主要介紹了mybatis自動掃描和自定義類注解方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法

    Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法

    今天小編就為大家分享一篇關(guān)于Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 解決springboot 實體類String轉(zhuǎn)Date類型的坑

    解決springboot 實體類String轉(zhuǎn)Date類型的坑

    這篇文章主要介紹了解決springboot 實體類String轉(zhuǎn)Date類型的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 深入淺析MyBatis foreach標(biāo)簽

    深入淺析MyBatis foreach標(biāo)簽

    Mybatis foreach 標(biāo)簽用于循環(huán)語句,它很好的支持了數(shù)據(jù)和 List、set 接口的集合,并對此提供遍歷的功能,本文給大家介紹MyBatis foreach標(biāo)簽的相關(guān)知識,感興趣的朋友一起看看吧
    2021-09-09

最新評論