zoukankan      html  css  js  c++  java
  • 深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?

    入口

    ApolloApplicationContextInitializer (它实现了 ApplicationContextInitializer接口,并重写了initialize方法)。

    ApplicationContextInitializer简单介绍:
    ApplicationContextInitializer是Spring框架原有的东西,这个类的主要作用就是在ConfigurableApplicationContext类型(或者子类型)的ApplicationContext做refresh之前,允许我们对ConfiurableApplicationContext的实例做进一步设置和处理。ApplicationContextInitializer接口是在spring容器刷新之前执行的一个回调函数。是在ConfigurableApplicationContext#refresh之前,允许我们对ConfigurableApplicationContext的实例做进一步的设置或者处理。

    ApolloApplicationContextInitializer#initialize 初始化

    主要做了一些初始化工作,其中本文要关注的就是这个ConfigService.getConfig(namespace)方法

    getConfig(String namespace) 加载配置

    DefaultConfigManager#getConfig(String namespace) 加载配置

    DefaultConfigFactory#create(String namespace) 创建Config工厂

    DefaultConfigFactory#createLocalConfigRepository(String namespace) 创建本地配置文件Repository

    (☆)LocalFileConfigRepository(String namespace, ConfigRepository upstream) 构造函数设置本地配置文件缓存路径

    LocalFileConfigRepository#setLocalCacheDir(File baseDir, boolean syncImmediately) 设置路径

    LocalFileConfigRepository#checkLocalConfigCacheDir(File baseDir) 确认路径存在

    (☆)LocalFileConfigRepository#findLocalCacheDir() 拼接路径

    ClassLoaderUtil

    (☆)ConfigUtil#getDefaultLocalCacheDir() 获取默认路径

    (☆)ConfigUtil#getCustomizedCacheRoot() 三种方式获取用户自定义配置路径

    DefaultServerProvider#initialize()

    总结

    Apollo获取本地配置文件缓存路径的流程

    1. 先获取自定义的路径,有优先顺序
    • 从系统属性中获取 System.getProperty("apollo.cacheDir")
    • 从系统环境变量中获取 Key为“APOLLO_CACHDIR”
    • 从服务配置文件中获取,根据操作系统不同,配置撰写的地址也不同。
      • SERVER_PROPERTIES_LINUX = "/opt/settings/server.properties";
      • SERVER_PROPERTIES_WINDOWS = "C:/opt/settings/server.properties";
    1. 如果从自定义方式没有获取到路径配置,则使用默认的路径前缀(根据操作系统不同,路径也不同)
      "C:optdata" , "/opt/data“

    注意:在获取完路径后,Apollo会对路径做一定的处理。
    1.在路径后加上一层路径,文件夹名称为当前应用AppId;
    2.在上述路径后,Apollo还会加一层文件夹,名称为"/config-cache"。
    所以,无论配置的路径是什么,最后两层文件夹一定是/{appId}/config-cache。

  • 相关阅读:
    WebView(网页视图)基本用法
    Android——ProgressBar(进度条)
    第一阶段任务
    第七周学习总结
    (HDU)1095 --A+B for Input-Output Practice (VII)(输入输出练习(VII))
    (HDU)1094 --A+B for Input-Output Practice (VI)(输入输出练习(VI))
    (HDU)1093 --A+B for Input-Output Practice (V)(输入输出练习(V))
    (HDU)1092 --A+B for Input-Output Practice (IV)(输入输出练习(IV))
    (HDU)1091 --A+B for Input-Output Practice (III)(输入输出练习(III))
    (HDU)1090 --A+B for Input-Output Practice (II)(输入输出练习(II))
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/14565774.html
Copyright © 2011-2022 走看看