Apollo(五)-源码解析-本地缓存文件位置
程序员文章站
2022-04-17 17:46:42
...
分析源码-缓存目录
Debug相关代码
先打断点确定主要的代码:
详细的函数调用情况如下所示:
分析源码
代码调用关系: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");
结果
- 2)配置文件C:\opt\settings\server.properties设置apollo.cacheDir制定缓存目录
apollo.cacheDir=C:\\ydfind\\data1
打断点可以看到目录正确设置了
3)getEnv系统相关变量,同理,这里不再尝试了。