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