liurunyu
3 天以前 f44135f835bf62319f9bb8a32e4592a707e5e8c1
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/Config.java
New file
@@ -0,0 +1,125 @@
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);
      }
   }
}