0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Eureka Server面向接口的方式讀取配置文件

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 17:05 ? 次閱讀

eureka sersver 配置環(huán)境

在上一篇中已經(jīng)介紹了,spring boot 是調(diào)用 類的 方法啟動 Eureka Server 的。

public void contextInitialized(ServletContextEvent event) {
    initEurekaEnvironment();
    initEurekaServerContext();

    // 省略不重要的代碼
}

初始化環(huán)境和加載配置文件在方法 initEurekaEnvironment 方法中,一起來看看吧。

String dataCenter = ConfigurationManager.getConfigInstance().getString(EUREKA_DATACENTER);

// 省略不重要代碼

String environment = ConfigurationManager.getConfigInstance().getString(EUREKA_ENVIRONMENT);
if (environment == null) {
    ConfigurationManager.getConfigInstance().setProperty(ARCHAIUS_DEPLOYMENT_ENVIRONMENT, TEST);
    logger.info("Eureka environment value eureka.environment is not set, defaulting to test");
}
  1. ConfigurationManager 的創(chuàng)建會加載一堆 config,這里不需要去看這一塊。
  2. 單例模式其實有很多種,如:餓漢模式、懶漢模式、雙重校驗鎖、靜態(tài)內(nèi)部類、枚舉等實現(xiàn)方式,這里 getConfigInstance() 方法用的是 volatile + synchronized + double check 雙重校驗鎖模式。
  3. 最后獲取 eureka server 的運(yùn)行環(huán)境,沒有配置運(yùn)行環(huán)境就用 test 環(huán)境。如讀取配置文件用:eureka-server-test.properties

面向接口

EurekaServerConfig 接口

initEurekaServerContext() 方法用于加載 Eureka Server 上下文。這個方法很長,先說他的第一行代碼:

EurekaServerConfig eurekaServerConfig = new DefaultEurekaServerConfig();

這行代碼創(chuàng)建了一個 EurekaServerConfig 對象。EurekaServerConfig 是一個接口。定義了許多配置項的方法。

圖片

這個類的作用就是,如果以后需要用到配置文件里面的數(shù)據(jù)只要:eurekaServerConfig.getXXX() 就能獲取,而不是像平常使用的 Properties。

DefaultEurekaServerConfig 默認(rèn)實現(xiàn)類

public DefaultEurekaServerConfig() {
    init();
}

DefaultEurekaServerConfig 是 eurekaServerConfig 的默認(rèn)實現(xiàn)類。

init()

init() 的前面兩行是設(shè)置環(huán)境的名稱。

private void init() {
    String env = ConfigurationManager.getConfigInstance().getString(
            EUREKA_ENVIRONMENT, TEST);
    ConfigurationManager.getConfigInstance().setProperty(
            ARCHAIUS_DEPLOYMENT_ENVIRONMENT, env);

    String eurekaPropsFile = EUREKA_PROPS_FILE.get();

    //省略try...catch..
    ConfigurationManager
                .loadCascadedPropertiesFromResources(eurekaPropsFile); 
}

EUREKA_PROPS_FILE 的定義是用單例工廠模式獲取 eureka.server.props 的值,默認(rèn)值是:eureka-server。

private static final DynamicStringProperty EUREKA_PROPS_FILE = DynamicPropertyFactory
            .getInstance().getStringProperty("eureka.server.props",
                    "eureka-server");

loadCascadedPropertiesFromResources() 方法是用來加載配置文件的。

首先會在 ConfigurationManager.loadCascadedProperties() 方法里面加載 eureka-server.props 配置文件

String defaultConfigFileName = configName + ".properties";
// 省略一部分代碼

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource(defaultConfigFileName);
Properties props = getPropertiesFromFile(url);

然后再加載 configName + "-" + environment + ".properties" 的配置文件。并且下面的配置文件會覆蓋上面的配置文件

String envConfigFileName = configName + "-" + environment + ".properties";

props.putAll(envProps);

最后將配置文件交給了 ConfigurationManager 管理。

eureka.server.properties

eureka.server.properties 的作用就是為配置文件里面的各個選項搞一個默認(rèn)值。但是它是一個空文件。

圖片

回過頭來看 DefaultEurekaServerConfig,它才是真正的默認(rèn)實現(xiàn)的地方。

圖片

總結(jié)

  1. initEurekaEnvironment() 是讀取環(huán)境,為下面的加載配置文件做準(zhǔn)備。
  2. DefaultEurekaServerConfig 類是 EurekaServerConfig 接口的默認(rèn)實現(xiàn),里面就是默認(rèn)的配置項。
  3. DefaultEurekaServerConfig 的init() 方法先讀取 eureka-server.props 后讀取 eureka-server-test.properties 配置文件。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8359

    瀏覽量

    150518
  • Server
    +關(guān)注

    關(guān)注

    0

    文章

    90

    瀏覽量

    23965
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    555

    瀏覽量

    24638
  • eureka
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1758
收藏 人收藏

    評論

    相關(guān)推薦

    基于libconfig進(jìn)行配置文件解析

    本文介紹基于libconfig進(jìn)行配置文件解析
    的頭像 發(fā)表于 06-08 10:18 ?1288次閱讀
    基于libconfig進(jìn)行<b class='flag-5'>配置文件</b>解析

    配置文件讀取

    配置文件讀取鍵的接線端是數(shù)值,存入的是字符串,是否可以通過轉(zhuǎn)換獨處字符串?求指教。
    發(fā)表于 07-24 11:01

    寫入和讀取配置文件實例

    分享自己寫的配置文件讀取
    發(fā)表于 12-21 23:30

    探討PROE的配置文件——系統(tǒng)配置文件config.pro

    PROE的配置文件讓不少初學(xué)者感到煩惱,盡管不少教材里都會提到關(guān)于PROE的配置文件。但大多數(shù)顯得過于理論化,而不便于初學(xué)者理解,可操作性不強(qiáng)。本文力求以通俗的語言結(jié)合
    發(fā)表于 09-28 15:50 ?0次下載

    ICD配置文件的詳細(xì)介紹和配置內(nèi)容的詳細(xì)概述

    配置文件配置文件是利用SCL語言描述變電站設(shè)備對象模型后生成的文件,用于在不同廠商的配置工具之間交換配置信息。
    的頭像 發(fā)表于 06-02 11:16 ?1.8w次閱讀
    ICD<b class='flag-5'>配置文件</b>的詳細(xì)介紹和<b class='flag-5'>配置</b>內(nèi)容的詳細(xì)概述

    AD8283評估板設(shè)計和配置文件

    AD8283評估板設(shè)計和配置文件
    發(fā)表于 05-31 16:04 ?9次下載
    AD8283評估板設(shè)計和<b class='flag-5'>配置文件</b>

    用于未壓縮高速數(shù)字接口的數(shù)字電視配置文件

    用于未壓縮高速數(shù)字接口的數(shù)字電視配置文件
    發(fā)表于 09-23 15:34 ?0次下載

    labview讀寫配置文件實例分享

    labview讀寫配置文件實例分享
    發(fā)表于 11-01 16:05 ?45次下載

    配置文件和例程文件的使用

    上期講述了AMetal平臺驅(qū)動框架中的硬件層,介紹了硬件層的驅(qū)動是如何實現(xiàn)及其硬件層接口的定義,逐漸深入了解AMetal平臺。接下來向大家介紹配置文件和例程文件的使用,以此可靈活使用相應(yīng)外設(shè)的資源。
    的頭像 發(fā)表于 04-07 11:49 ?2028次閱讀
    <b class='flag-5'>配置文件</b>和例程<b class='flag-5'>文件</b>的使用

    SpringBoot配置文件application

    Map配置 YML配置文件: sys-num: mymap: "{'a':'aaa','b':'bbb'}" 方法內(nèi): public class learnMap { @Value
    的頭像 發(fā)表于 01-13 15:28 ?588次閱讀

    Eureka Client的創(chuàng)建案例

    在上篇中已經(jīng)講了 Eureka Server配置文件讀取。接下來講講 Eureka Client 的創(chuàng)建。每一個
    的頭像 發(fā)表于 10-09 17:03 ?460次閱讀
    <b class='flag-5'>Eureka</b> Client的創(chuàng)建案例

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?490次閱讀
    KT142C語音芯片<b class='flag-5'>配置文件</b>總是不起作用?<b class='flag-5'>配置文件</b>的問題集中歸納

    linux修改網(wǎng)卡ip配置文件

    Linux是一種開源的操作系統(tǒng),因此,它給用戶提供了很高的自由度,可以根據(jù)個人需要進(jìn)行各種定制和配置。其中,修改網(wǎng)絡(luò)接口配置文件是常見的操作,可以通過修改網(wǎng)卡ip配置文件來設(shè)置網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-17 10:51 ?1996次閱讀

    springboot的全局配置文件有幾種

    分為兩種類型:properties和YAML。Properties文件是一種常見的配置文件類型,它使用鍵值對的方式
    的頭像 發(fā)表于 12-03 15:28 ?1441次閱讀

    php的配置文件是什么

    PHP的配置文件是一種用于配置PHP解釋器的文本文件。它包含了一系列的指令和選項,用于影響PHP的行為和性能。通過修改配置文件,可以改變PHP解釋器的默認(rèn)行為,從而滿足不同的需求。 在
    的頭像 發(fā)表于 12-04 15:55 ?1415次閱讀