配置管理,拓展hadoop的configuration,提供丰富的接口
package com.fiberhome.orc.conf;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.Properties;
/**
* 配置管理,拓展hadoop的configuration,提供丰富的接口
* 说明:直接在ConfVars中定义变量key,default,description.<br>
* 目前,默认从系统配置变量中获取(-Dkey=value指定方式),另外通过load方法可以直接指定配置加载导入。<br>
* 用法:<br>
* FBDBConfiguration conf = new FBDBConfiguration();<br>
* conf.load(path);<br>
* conf.getInt(ConfVars.xxx)<br>
*/
public class FBDBConfiguration extends Configuration {
private static Logger logger = LoggerFactory.getLogger(FBDBConfiguration.class);
public FBDBConfiguration() {
this(false);
}
public FBDBConfiguration(boolean loadDefaults) {
super(loadDefaults);
}
public String getString(ConfVars var) {
String value = this.get(var.varName);
if (value == null) {
this.set(var.varName, var.defaultValue);
return var.defaultValue;
}
return value;
}
public int getInt(ConfVars var) {
return this.getInt(var.varName, Integer.parseInt(var.defaultValue));
}
public long getLong(ConfVars var) {
return this.getLong(var.varName, Long.parseLong(var.defaultValue));
}
public boolean getBoolean(ConfVars var) {
return this.getBoolean(var.varName, Boolean.parseBoolean(var.defaultValue));
}
public enum ConfVars {
ORC_META_NAME("orc.meta.name", "manifest", "orc元数据的文件名");
public final String varName;
public final String defaultValue;
public final String description;
ConfVars(String varName, String defaultValue, String description) {
this.varName = varName;
this.defaultValue = defaultValue;
this.description = description;
}
}
/**
* 从外部配置文件加载,会覆盖默认从系统配置读取的配置
*
* @param confPath
*/
public void load(String confPath) throws IOException {
//加载配置项
InputStream input = null;
try {
input = new FileInputStream(new File(confPath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Properties properties = new Properties();
try {
properties.load(input);
for (ConfVars vars : ConfVars.values()) {
String value = properties.getProperty(vars.varName);
this.set(vars.varName, StringUtils.isEmpty(value) ? vars.defaultValue : value);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
input.close();
}
}
}