package edu.fzu.ir.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.Properties; import org.apache.log4j.Logger; /** * 读取配置文件的工具类 * 提供了静态读取配置文件的方法 * 改配置文件是放在每个worker节点�? * worker启动时根据配置文件路径读取该配置文件 * @author hasee * */ public class Configuration { private static Logger logger = Logger.getLogger(Configuration.class); private static Properties properties; private Configuration() {} /** * 通过配置文件的路径获取相关的配置,存储在properties中,worker每次启动时调用该方法 * @param confPath 配置文件的路�? */ public static void loadConfiguration(String confPath) { //判断properties是否是空,如果不为空表示已经加载过配置文件,不需要再加载 if(properties==null) { //利用InputStreamReader指定利用utf-8编码读取properties文件 //这样是为了解决配置文件中的中文乱码问�? InputStream inputStream = null; InputStreamReader isr = null; try { inputStream = new FileInputStream(new File(confPath)); isr = new InputStreamReader(inputStream, "UTF-8"); } catch (FileNotFoundException e) { //文件未找到时,输出错误日志,并停止系�? logger.error(e); System.exit(0); } catch (UnsupportedEncodingException e) { logger.error(e); System.exit(0); } properties = new Properties(); try { //加载并存储到properties logger.info("load configuration from : "+ confPath); properties.load(isr); logger.info("load succeed!"); } catch (IOException e) { logger.error(e); } finally { //关闭资源 try { if(inputStream != null) { inputStream.close(); } if(isr != null) { isr.close(); } } catch (IOException e) { logger.error(e); } } } } /** * 获取配置文件中某�?��配置�?若不存在返回null * @param key 配置项的key�? * @return */ public static String getProperties(String key) { String s = null; if(properties != null){ s = properties.getProperty(key); } return s; } }