package com.dy.common.util; import java.io.InputStream; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; @SuppressWarnings("unused") public class Config { private static HashMap configs; private static Config config; /** * 得到唯一实例 * @return 返回实例 */ public static Config getInstance() { if (config == null) { config = new Config(); configs = new HashMap<>(); } return config; } private Config() { } /** * 根据配置名称得到配置值 * @param name 配置名称 * @return 配置值 */ public static String getConfig(String name) { if (configs == null) { return null; } if(name.trim().equals("")){ return "" ; } return configs.get(name); } /** * 初始化配置 * @param fileUrl 配置文件路径 * @throws Exception 抛出异常 */ public void init(URL fileUrl) throws Exception { parseConfig(createDom(fileUrl)); } /** * 重新初始化 * @param fileUrl 配置文件路径 * @param propertiesInput 属性文件输入流 * @throws Exception 抛出异常 */ public void reInit(URL fileUrl, InputStream propertiesInput) throws Exception { configs = new HashMap<>(); parseConfig(createDom(fileUrl)); } /** * 创建dom对象 * @param configFileURL 配置文件路径 * @return dom对象 */ private Document createDom(URL configFileURL) throws Exception { if (configFileURL == null) { throw new Exception("没有得到配置文件!", null); } Document doc = null; try { SAXBuilder sb = new SAXBuilder(); doc = sb.build(configFileURL); if (doc == null) { throw new Exception("没有生成配置文件的DOM对象!", null); } } catch (Exception e) { throw new Exception("生成配置文件的DOM对象失败!", e); } return doc; } /** * 分析服务器运行参数 * @param doc dom对象 * @throws Exception 抛出异常 */ private void parseConfig(Document doc) throws Exception { Element root = doc.getRootElement(); if (root == null) { throw new Exception("没有得到配置文件根元素config!"); } List list = root.getChildren(); if (list == null) { throw new Exception("配置文件没有配置元素!"); } Iterator it = list.iterator(); Element e ; String name ; String tx ; while (it.hasNext()) { e = it.next(); if (e == null) { throw new Exception("得到配置文件中元素配置出错!"); } name = e.getName(); if (configs.get(name) != null) { throw new Exception("配置文件中元素" + name + "重名!"); } tx = e.getText(); if(tx != null && tx.startsWith("${") && tx.endsWith("}")){ tx = tx.substring(2, tx.length() - 1) ; tx = ConfigProperties.getConfig(tx) ; } configs.put(name, tx); } } }