| New file | 
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|