欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apollo(五)-源码解析-本地缓存文件位置

程序员文章站 2022-04-17 17:46:42
...

Apollo-源码解析-本地缓存文件位置

分析源码-缓存目录

Debug相关代码

先打断点确定主要的代码:
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
详细的函数调用情况如下所示:
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置

分析源码

代码调用关系:findLocalCacheDir() -> LocalFileConfigRepository.findLocalCacheDir -> ConfigUtil.java

private File findLocalCacheDir() {
    try {
      String defaultCacheDir = m_configUtil.getDefaultLocalCacheDir();
      Path path = Paths.get(defaultCacheDir);
      if (!Files.exists(path)) {
        Files.createDirectories(path);
      }
      if (Files.exists(path) && Files.isWritable(path)) {
        return new File(defaultCacheDir, CONFIG_DIR);
      }
    } catch (Throwable ex) {
      //ignore
    }

    return new File(ClassLoaderUtil.getClassPath(), CONFIG_DIR);
  }
// ConfigUtil.java
// 返回本地缓存目录
public String getDefaultLocalCacheDir() {
    String cacheRoot = getCustomizedCacheRoot();

    if (!Strings.isNullOrEmpty(cacheRoot)) {
      return cacheRoot + File.separator + getAppId();
    }

    cacheRoot = isOSWindows() ? "C:\\opt\\data\\%s" : "/opt/data/%s";
    return String.format(cacheRoot, getAppId());
}

private String getCustomizedCacheRoot() {
    // 1. Get from System Property-----可以通过设置System的apollo.cacheDir制定缓存目录
    String cacheRoot = System.getProperty("apollo.cacheDir");
    if (Strings.isNullOrEmpty(cacheRoot)) {
      // 2. Get from OS environment variable
      cacheRoot = System.getenv("APOLLO_CACHEDIR");
    }
    if (Strings.isNullOrEmpty(cacheRoot)) {
      // 3. Get from server.properties-----配置文件设置apollo.cacheDir制定缓存目录
      cacheRoot = Foundation.server().getProperty("apollo.cacheDir", null);
    }

    return cacheRoot;
}

// 判断是否是windows操作系统
public boolean isOSWindows() {
    String osName = System.getProperty("os.name");
    if (Strings.isNullOrEmpty(osName)) {
      return false;
    }
    return osName.startsWith("Windows");
}

结论

  • 1)可以通过设置System(大多数是与程序有关)的apollo.cacheDir制定缓存目录
System.setProperty("apollo.cacheDir", "C:\\ydfind\\data");

结果
Apollo(五)-源码解析-本地缓存文件位置

  • 2)配置文件C:\opt\settings\server.properties设置apollo.cacheDir制定缓存目录
apollo.cacheDir=C:\\ydfind\\data1

Apollo(五)-源码解析-本地缓存文件位置
打断点可以看到目录正确设置了
Apollo(五)-源码解析-本地缓存文件位置
Apollo(五)-源码解析-本地缓存文件位置
3)getEnv系统相关变量,同理,这里不再尝试了。

相关标签: Apollo