| 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<String, String> 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<Element> list = root.getChildren(); | 
|         if (list == null) { | 
|             throw new Exception("配置文件没有配置元素!"); | 
|         } | 
|         Iterator<Element> 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);     | 
|         } | 
|     } | 
| } |