0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 17:05 次阅读

eureka sersver 配置环境

在上一篇中已经介绍了,spring boot 是调用 类的 方法启动 Eureka Server 的。

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

    // 省略不重要的代码
}

初始化环境和加载配置文件在方法 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 的创建会加载一堆 config,这里不需要去看这一块。
  2. 单例模式其实有很多种,如:饿汉模式、懒汉模式、双重校验锁、静态内部类、枚举等实现方式,这里 getConfigInstance() 方法用的是 volatile + synchronized + double check 双重校验锁模式。
  3. 最后获取 eureka server 的运行环境,没有配置运行环境就用 test 环境。如读取配置文件用:eureka-server-test.properties

面向接口

EurekaServerConfig 接口

initEurekaServerContext() 方法用于加载 Eureka Server 上下文。这个方法很长,先说他的第一行代码:

EurekaServerConfig eurekaServerConfig = new DefaultEurekaServerConfig();

这行代码创建了一个 EurekaServerConfig 对象。EurekaServerConfig 是一个接口。定义了许多配置项的方法。

图片

这个类的作用就是,如果以后需要用到配置文件里面的数据只要:eurekaServerConfig.getXXX() 就能获取,而不是像平常使用的 Properties。

DefaultEurekaServerConfig 默认实现类

public DefaultEurekaServerConfig() {
    init();
}

DefaultEurekaServerConfig 是 eurekaServerConfig 的默认实现类。

init()

init() 的前面两行是设置环境的名称。

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 的值,默认值是: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 的作用就是为配置文件里面的各个选项搞一个默认值。但是它是一个空文件。

图片

回过头来看 DefaultEurekaServerConfig,它才是真正的默认实现的地方。

图片

总结

  1. initEurekaEnvironment() 是读取环境,为下面的加载配置文件做准备。
  2. DefaultEurekaServerConfig 类是 EurekaServerConfig 接口的默认实现,里面就是默认的配置项。
  3. DefaultEurekaServerConfig 的init() 方法先读取 eureka-server.props 后读取 eureka-server-test.properties 配置文件。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8486

    浏览量

    150805
  • Server
    +关注

    关注

    0

    文章

    90

    浏览量

    23999
  • 文件
    +关注

    关注

    1

    文章

    561

    浏览量

    24692
  • eureka
    +关注

    关注

    0

    文章

    4

    浏览量

    1761
收藏 人收藏

    评论

    相关推荐

    基于libconfig进行配置文件解析

    本文介绍基于libconfig进行配置文件解析
    的头像 发表于 06-08 10:18 1337次阅读
    基于libconfig进行<b class='flag-5'>配置文件</b>解析

    配置文件读取

    配置文件读取键的接线端是数值,存入的是字符串,是否可以通过转换独处字符串?求指教。
    发表于 07-24 11:01

    写入和读取配置文件实例

    分享自己写的配置文件读取
    发表于 12-21 23:30

    探讨PROE的配置文件——系统配置文件config.pro

    PROE的配置文件让不少初学者感到烦恼,尽管不少教材里都会提到关于PROE的配置文件。但大多数显得过于理论化,而不便于初学者理解,可操作性不强。本文力求以通俗的语言结合
    发表于 09-28 15:50 0次下载

    ICD配置文件的详细介绍和配置内容的详细概述

    配置文件配置文件是利用SCL语言描述变电站设备对象模型后生成的文件,用于在不同厂商的配置工具之间交换配置信息。
    的头像 发表于 06-02 11:16 1.8w次阅读
    ICD<b class='flag-5'>配置文件</b>的详细介绍和<b class='flag-5'>配置</b>内容的详细概述

    AD8283评估板设计和配置文件

    AD8283评估板设计和配置文件
    发表于 05-31 16:04 9次下载
    AD8283评估板设计和<b class='flag-5'>配置文件</b>

    用于未压缩高速数字接口的数字电视配置文件

    用于未压缩高速数字接口的数字电视配置文件
    发表于 09-23 15:34 0次下载

    labview读写配置文件实例分享

    labview读写配置文件实例分享
    发表于 11-01 16:05 45次下载

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

    上期讲述了AMetal平台驱动框架中的硬件层,介绍了硬件层的驱动是如何实现及其硬件层接口的定义,逐渐深入了解AMetal平台。接下来向大家介绍配置文件和例程文件的使用,以此可灵活使用相应外设的资源。
    的头像 发表于 04-07 11:49 2094次阅读
    <b class='flag-5'>配置文件</b>和例程<b class='flag-5'>文件</b>的使用

    SpringBoot配置文件application

    Map配置 YML配置文件: sys-num: mymap: "{'a':'aaa','b':'bbb'}" 方法内: public class learnMap { @Value
    的头像 发表于 01-13 15:28 614次阅读

    Eureka Client的创建案例

    在上篇中已经讲了 Eureka Server配置文件读取。接下来讲讲 Eureka Client 的创建。每一个
    的头像 发表于 10-09 17:03 486次阅读
    <b class='flag-5'>Eureka</b> Client的创建案例

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳
    的头像 发表于 10-20 15:04 544次阅读
    KT142C语音芯片<b class='flag-5'>配置文件</b>总是不起作用?<b class='flag-5'>配置文件</b>的问题集中归纳

    linux修改网卡ip配置文件

    Linux是一种开源的操作系统,因此,它给用户提供了很高的自由度,可以根据个人需要进行各种定制和配置。其中,修改网络接口配置文件是常见的操作,可以通过修改网卡ip配置文件来设置网络
    的头像 发表于 11-17 10:51 2134次阅读

    springboot的全局配置文件有几种

    分为两种类型:properties和YAML。Properties文件是一种常见的配置文件类型,它使用键值对的方式
    的头像 发表于 12-03 15:28 1503次阅读

    php的配置文件是什么

    PHP的配置文件是一种用于配置PHP解释器的文本文件。它包含了一系列的指令和选项,用于影响PHP的行为和性能。通过修改配置文件,可以改变PHP解释器的默认行为,从而满足不同的需求。 在
    的头像 发表于 12-04 15:55 1462次阅读