国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

springcloud config配置讀取優(yōu)先級過程詳解

2019-11-02 14:10:20
字體:
供稿:網(wǎng)友

情景描述

最近在修復(fù)Eureka的靜態(tài)頁面加載不出的缺陷時,最終發(fā)現(xiàn)是遠(yuǎn)程GIT倉庫將靜態(tài)資源訪問方式配置給禁用了(spring.resources.add-mappings=false)。雖然最后直接修改遠(yuǎn)程GIT倉庫的此配置項給解決了(spring.resources.add-mappings=true),但是從中牽涉出的配置讀取優(yōu)先級我們必須好好的再回顧下

springcloud config讀取倉庫配置

通過config client模塊來讀取遠(yuǎn)程的倉庫配置,只需要在boostrap.properties文件中配置如下屬性即可

spring.application.name=eurekaspring.cloud.config.uri=http://localhost:8888spring.cloud.config.name=devspring.cloud.config.username=devspring.cloud.config.password=dev

其就會以GET方式去請求http://localhost:8888/eureka/dev地址從而將配置拉取下來。
當(dāng)然上述的API地址也是需要被訪問服務(wù)器部署了config server服務(wù)方可調(diào)用,具體的細(xì)節(jié)就不展開了

外部源讀取優(yōu)先級

我們都知道spring的配置屬性管理均是存放在Enviroment對象中,就以普通項目StandardEnvironment為例,其配置的存放順序可羅列如下

順位 key 來源 說明
1 commandLineArgs 傳入main函數(shù)的參數(shù)列表 Program arguments
2 systemProperties System.getProperties() JDK屬性列表、操作系統(tǒng)屬性、-D開頭的VM屬性等
3 systemEnvironment System.getEnv() 環(huán)境屬性,例如JAVA_HOME/M2_HOME
4 ${file_name} 配置文件 例如application.yml
5 defaultProperties SpringApplicationBuilder#properties()

那么遠(yuǎn)程讀取的配置的存放應(yīng)該放在上述的哪個位置呢?

我們都知道boostrap上下文通過暴露org.springframework.cloud.bootstrap.config.PropertySourceLocator接口來方便集成第三方的外部源配置讀取,比如本文提及的config client模塊中的org.springframework.cloud.config.client.ConfigServicePropertySourceLocator實現(xiàn)類。

但最終將外部源配置讀取以及插入至Environment對象中則是通過org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration類來完成的。

PropertySourceBootstrapConfiguration

此類也是ApplicationContextInitializer接口的實現(xiàn)類,閱讀過cloud源碼的都知道,此類被調(diào)用是在子類上下文初始化的時候,我們主要看下其復(fù)寫的initialize()方法

 @Override public void initialize(ConfigurableApplicationContext applicationContext) {  CompositePropertySource composite = new CompositePropertySource(    BOOTSTRAP_PROPERTY_SOURCE_NAME);  // 對在boostrap上下文類型為PropertySourceLocator的bean集合進行排序  AnnotationAwareOrderComparator.sort(this.propertySourceLocators);  boolean empty = true;  ConfigurableEnvironment environment = applicationContext.getEnvironment();  for (PropertySourceLocator locator : this.propertySourceLocators) {   PropertySource<?> source = null;   // 讀取外部配置源   source = locator.locate(environment);   if (source == null) {    continue;   }   logger.info("Located property source: " + source);   composite.addPropertySource(source);   empty = false;  }  if (!empty) {   MutablePropertySources propertySources = environment.getPropertySources();   String logConfig = environment.resolvePlaceholders("${logging.config:}");   LogFile logFile = LogFile.get(environment);   if (propertySources.contains(BOOTSTRAP_PROPERTY_SOURCE_NAME)) {    propertySources.remove(BOOTSTRAP_PROPERTY_SOURCE_NAME);   }   // 插入至Environment環(huán)境對象中   insertPropertySources(propertySources, composite);   reinitializeLoggingSystem(environment, logConfig, logFile);   setLogLevels(applicationContext, environment);   handleIncludedProfiles(environment);  } }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大兴区| 剑河县| 莱州市| 通河县| 富民县| 六枝特区| 迭部县| 英德市| 景德镇市| 林甸县| 鹿邑县| 开平市| 项城市| 宿州市| 台州市| 惠东县| 辽宁省| 巫溪县| 桂东县| 清徐县| 西充县| 徐州市| 屏山县| 盈江县| 辽源市| 于田县| 定安县| 定兴县| 阜城县| 古交市| 牟定县| 易门县| 龙山县| 张家口市| 宣汉县| 高雄县| 蕉岭县| 金塔县| 紫金县| 醴陵市| 东乡族自治县|