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

nacos(SpringCloud)配置加載過(guò)程

 更新時(shí)間:2024年12月10日 11:42:59   作者:ke_ek121  
Nacos是Spring Cloud的配置中心,通過(guò)BootstrapApplicationListener和ConfigFileApplicationListener監(jiān)聽(tīng)器加載配置文件,并通過(guò)PropertySourceBootstrapConfiguration將Nacos配置加載到Spring Boot應(yīng)用的environment中

nacos(SpringCloud)配置加載

要說(shuō)nacos配置加載,首先說(shuō)一下bootstrap配置文件加載。

眾所周知,Springboot由run方法啟動(dòng),這里就不展開(kāi)講了,我們主要看下面的代碼,創(chuàng)建Spring容器之前先準(zhǔn)備環(huán)境

org.springframework.boot.SpringApplication#prepareEnvironment

首先會(huì)創(chuàng)建或獲取一個(gè)environment,然后加載一些系統(tǒng)配置(環(huán)境變量等)

接下來(lái)關(guān)鍵了,發(fā)布ApplicationEnvironmentPreparedEvent事件

監(jiān)聽(tīng)器有很多,與此次有關(guān)的是

  • BootstrapApplicationListener (創(chuàng)建Spring容器和配置中心交互)
  • ConfigFileApplicationListener(讀取配置文件加載到environment)

首先是BootstrapApplicationListener,如下,可知默認(rèn)配置名字bootstrap,接著會(huì)進(jìn)入bootstrapServiceContext方法創(chuàng)建Spring容器

org.springframework.cloud.bootstrap.BootstrapApplicationListener#bootstrapServiceContext

這里會(huì)重走run方法進(jìn)行容器的創(chuàng)建,兩個(gè)容器是不同的

springboot容器為AnnotationConfigServletWebServerApplicationContext,cloud為AnnotationConfigApplicationContext,由上面的內(nèi)容可知這里又會(huì)重走監(jiān)聽(tīng)器,

BootstrapApplicationListener,不過(guò)會(huì)由于以下代碼返回

接下來(lái)我們看一下另一個(gè)重要的監(jiān)聽(tīng)器ConfigFileApplicationListener

由上可知,這里主要調(diào)用EnvironmentPostProcessorpostProcessEnvironment進(jìn)行處理;我們主要看的還是

org.springframework.boot.context.config.ConfigFileApplicationListener#postProcessEnvironment

這里沒(méi)有展開(kāi),有興趣可以看源碼,我們主要看加載前后cloud 的environment的變化

加載前

加載后

可以看出主要就是多了bootstrap.yml配置。

接下來(lái)我們看boot的environment的變化

加載前

加載后

可以看出多了application.properties的配置

那么問(wèn)題來(lái)了,cloud的配置(bootstrap.yml)是如何加載到boot中的呢

listener看完了,接下來(lái)就到Initializer

而Initializer的調(diào)用時(shí)機(jī)就在org.springframework.boot.SpringApplication#prepareContext

這里我們也重點(diǎn)看兩個(gè)

AncestorInitializer

創(chuàng)建時(shí)機(jī),cloud的容器創(chuàng)建完成

initialize方法,添加了bootstrap.yml方法到boot 的environment中

另一個(gè)是PropertySourceBootstrapConfiguration

我們先來(lái)看一下它是如何引入的

在創(chuàng)建cloud 的容器時(shí),會(huì)引入一個(gè)配置BootstrapImportSelectorConfiguration

又引入了BootstrapImportSelector

這里利用SPI加載了PropertySourceBootstrapConfiguration

接下來(lái)我們看看initialize方法

這里就是使用PropertySourceLocator.locate()方法加載配置,然后添加到environment。

比如NacosPropertySourceLocator

至此nacos(SpringCloud)配置加載完畢。

后續(xù)補(bǔ)充:naocs共享配置和擴(kuò)展配置

spring:
  profiles:
    active: dev
  application:
    name: alibaba-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        #共享配置
        shared-configs:
          - data-id: shard-test.yaml
            group: SHARD_GROUP
            refresh: true
        #擴(kuò)展配置
        extension-configs:
          - data-id: ext-test.yaml
            group: EXT_GROUP
            refresh: true

不管是shared-configs還是extension-configs,對(duì)應(yīng)的data-id都需要加上文件后綴,如.yaml

數(shù)組下標(biāo)越大的配置項(xiàng)優(yōu)先級(jí)越高

不同配置優(yōu)先級(jí) 默認(rèn)配置 > 擴(kuò)展配置 > 共享配置

總結(jié)

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

相關(guān)文章

  • Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn)

    Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn)

    隨著項(xiàng)目的不斷演進(jìn)和業(yè)務(wù)需求的增長(zhǎng),很多場(chǎng)景下需要實(shí)現(xiàn)系統(tǒng)的動(dòng)態(tài)性和靈活性,本文主要介紹了Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot學(xué)習(xí)之基于注解的緩存

    SpringBoot學(xué)習(xí)之基于注解的緩存

    spring boot對(duì)緩存支持非常靈活,我們可以使用默認(rèn)的EhCache,也可以整合第三方的框架,只需配置即可,下面這篇文章主要給大家介紹了關(guān)于SpringBoot學(xué)習(xí)之基于注解緩存的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java獲取時(shí)間打印到控制臺(tái)代碼實(shí)例

    Java獲取時(shí)間打印到控制臺(tái)代碼實(shí)例

    這篇文章主要介紹了Java獲取時(shí)間打印到控制臺(tái)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 簡(jiǎn)單聊聊工作中常用的Java?Lambda表達(dá)式

    簡(jiǎn)單聊聊工作中常用的Java?Lambda表達(dá)式

    日常開(kāi)發(fā)中,我們很多時(shí)候需要用到Java?8的Lambda表達(dá)式,它允許把函數(shù)作為一個(gè)方法的參數(shù),讓我們的代碼更優(yōu)雅、更簡(jiǎn)潔。所以整理了一波工作中常用的Lambda表達(dá)式??赐暌欢〞?huì)有幫助的
    2022-11-11
  • Java中Stream流Map分組方式詳細(xì)匯總

    Java中Stream流Map分組方式詳細(xì)匯總

    Stream將要處理的元素集合看作一種流,在流的過(guò)程中借助Stream?API對(duì)流中的元素進(jìn)行操作,比如篩選、排序、聚合等,下面這篇文章主要給大家介紹了關(guān)于Java中Stream流Map分組方式的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    Spring Cache是Spring框架提供的一個(gè)緩存抽象層,它簡(jiǎn)化了緩存的使用和管理,Spring Cache默認(rèn)使用服務(wù)器內(nèi)存,并無(wú)法控制緩存時(shí)長(zhǎng),查找緩存中的數(shù)據(jù)比較麻煩,本文已常用的Redis作為緩存中間件作為示例,詳細(xì)講解項(xiàng)目中如何使用Cache提高系統(tǒng)性能,需要的朋友可以參考下
    2025-01-01
  • Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別

    Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別

    這篇文章主要介紹了Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別,文章介紹詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • HashMap插入相同key問(wèn)題

    HashMap插入相同key問(wèn)題

    這篇文章主要介紹了HashMap插入相同key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java中ReUtil正則表達(dá)式工具庫(kù)的使用

    Java中ReUtil正則表達(dá)式工具庫(kù)的使用

    ReUtil是Hutool庫(kù)中的正則表達(dá)式工具類,提供了多種常用正則表達(dá)式操作方法,下面就來(lái)介紹一下ReUtil的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Java中的抽象工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中的抽象工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    抽象工廠模式是工廠方法模式的升級(jí)版本,他用來(lái)創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象。下面通過(guò)本文給大家分享Java中的抽象工廠模式,感興趣的朋友一起看看吧
    2017-08-08

最新評(píng)論