深入理解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:\opt\data" , "/opt/data“

注意:在獲取完路徑後,Apollo會對路徑做一定的處理。
1.在路徑後加上一層路徑,文件夾名稱爲當前應用AppId;
2.在上述路徑後,Apollo還會加一層文件夾,名稱爲"/config-cache"。
所以,無論配置的路徑是什麼,最後兩層文件夾一定是/{appId}/config-cache。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章