kylin源码走读_kylinConfig
来源:互联网 发布:linux的家目录 编辑:程序博客网 时间:2024/06/07 22:42
kylin配置文件获取
public class KylinConfig extends KylinConfigBase KylinConfig继承自KylinConfigBase
public static KylinConfig getInstanceFromEnv() { //同步锁 synchronized (KylinConfig.class) { //获取本地实例的config KylinConfig config = THREAD_ENV_INSTANCE.get();//判断实例中的config是否存在,如果存在则直接返回config if (config != null) { return config; } //如果不存在则读本地配置文件 if (SYS_ENV_INSTANCE == null) { try { config = new KylinConfig(); config.reloadKylinConfig(buildSiteProperties()); logger.info("Initialized a new KylinConfig from getInstanceFromEnv : " + System.identityHashCode(config)); SYS_ENV_INSTANCE = config; } catch (IllegalArgumentException e) { throw new IllegalStateException("Failed to find KylinConfig ", e); } } return SYS_ENV_INSTANCE; } }
KylinConfig config = KylinConfig.getInstanceFromEnv();
getInstanceFromEnv方法的具体实现如下:首先获取从本地实例的THREAD_ENV_INSTANCE中获取kylinConfig,如果不为null则直接返回实例中config,如果为null,则读取本地配置问题,然后调用kylinConfig自身的bulidSiteProperties()方法返回一个Properties 最后通过config.reloadKylinConfig()方法把配置项加载到config中。赋值给SYS_ENV_INSTANCE 返回。
bulidSiteProperties()方法实现如下:
private static Properties buildSiteProperties() { Properties conf = new Properties(); OrderedProperties orderedProperties = buildSiteOrderedProps(); for (Map.Entry<String, String> each : orderedProperties.entrySet()) { conf.put(each.getKey(), each.getValue()); } return conf; }
bulidSiteOrderedProps()方法实现如下:
// build kylin properties from site deployment, a.k.a KYLIN_HOME/conf/kylin.properties private static OrderedProperties buildSiteOrderedProps() { try { // 1. load default configurations from classpath. // we have a kylin-defaults.properties in kylin/core-common/src/main/resources URL resource = Thread.currentThread().getContextClassLoader().getResource("kylin-defaults.properties"); Preconditions.checkNotNull(resource); logger.info("Loading kylin-defaults.properties from {}", resource.getPath()); OrderedProperties orderedProperties = new OrderedProperties(); loadPropertiesFromInputStream(resource.openStream(), orderedProperties); for (int i = 0; i < 10; i++) { String fileName = "kylin-defaults" + (i) + ".properties"; URL additionalResource = Thread.currentThread().getContextClassLoader().getResource(fileName); if (additionalResource != null) { logger.info("Loading {} from {} ", fileName, additionalResource.getPath()); loadPropertiesFromInputStream(additionalResource.openStream(), orderedProperties); } } // 2. load site conf, to keep backward compatibility it's still named kylin.properties // actually it's better to be named kylin-site.properties File propFile = getSitePropertiesFile(); if (propFile == null || !propFile.exists()) { logger.error("fail to locate " + KYLIN_CONF_PROPERTIES_FILE); throw new RuntimeException("fail to locate " + KYLIN_CONF_PROPERTIES_FILE); } loadPropertiesFromInputStream(new FileInputStream(propFile), orderedProperties); // 3. still support kylin.properties.override as secondary override // not suggest to use it anymore File propOverrideFile = new File(propFile.getParentFile(), propFile.getName() + ".override"); if (propOverrideFile.exists()) { loadPropertiesFromInputStream(new FileInputStream(propOverrideFile), orderedProperties); } return orderedProperties; } catch (IOException e) { throw new RuntimeException(e); } }
bulidSiteProperties() 方法读取 KYLIN_HOME/conf/kylin.properties 文件,具体逻辑:
1.首先从classpath中读取默认kylin-defaults.properties文件,文件位置:kylin/core-common/src/main/resources
生成URL路径,Preconditions.checkNotNull(resource)判断是否为NULL,如果为null,则抛出空指针异常,不为null则使用url.openStream()返回一个InputSteam对象。调用kylinConfig.loadPropertiesFromInputStream()方法,把配置文件中的配置项通过kv形式赋值给orderedProperties对象,接着循环10次判断是否有额外新增的配置文件命名格式以kylin-defaults" + (i) + ".properties,如果有,则重复上述步骤调用kylinConfig.loadPropertiesFromInputStream()方法获取配置项
2.为了保持向后兼容性,调用kylin.getSitePropertiesFile() 返回一个文件对象,然后判断是否为null,接着同上调用kylin.getSitePropertiesFile() 返回一个文件对象重复上述步骤调用kylinConfig.loadPropertiesFromInputStream()方法获取配置项
3.还支持kylin.properties 的重写这里不再鳌述。
kylinConfig.reloadKylinConfig() 方法主要是通过调用
BackwardCompatibilityConfig.check()方法把key,value强制转化为String类型,类似于格式化
- kylin源码走读_kylinConfig
- MiniGUI源码走读
- MiniGUI源码走读
- hadoop源码走读
- MiniGUI源码走读
- MiniGUI源码走读
- JFianl源码走读_7_Interceptor
- DAGScheduler 源码走读
- Kubelet 源码走读(1)
- Spark源码走读概述
- execve函数源码走读
- kcp源码走读
- Apache Spark源码走读
- Kylin源码 二次开发
- 如何调试Kylin源码
- MiniGUI源码走读(转载)
- Apache Spark源码走读系列
- JFinal源码走读_1_jfinal初始化
- Android录屏通过udp共享到其它手机
- leetcode 674 Longest Continuous Increasing Subsequence
- ajax 配置项type和method的区别
- 在3种数据库中使用关键字作为字段名的解决方法
- leetcode :Valid Anagram
- kylin源码走读_kylinConfig
- MV*关于业务逻辑的描述
- 网站后台不能添加图片,如果是服务器权限问题,应该如何解决?方法如下
- 欢迎使用CSDN-markdown编辑器
- Maven的安装配置
- GIT相关
- bzoj 2435: [Noi2011]道路修建(DFS)
- Linux内核:工作队列
- jquery 做全选操作,undefined