用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级)

Posted wangquanyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级)相关的知识,希望对你有一定的参考价值。

代码写法:

  1 import java.io.File;
  2 import java.io.FileInputStream;
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.util.Enumeration;
  6 import java.util.HashMap;
  7 import java.util.Properties;
  8 
  9 import org.slf4j.Logger;
 10 import org.slf4j.LoggerFactory;
 11 
 12 /**
 13  * 用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级):1。代码中明确的配置集。 2.从文件加载的配置。 3.默认配置。优先级较高的配置将覆盖优先级较低的配置。
 14  * 
 15  */
 16 public class ConfigurationUtils
 17 
 18     
 19     private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationUtils.class);
 20     
 21     private HashMap<String, String> propertyMapFromFile = new HashMap<String, String>();;
 22     
 23     private HashMap<String, String> propertyMapExplicitlyDefined = new HashMap<String, String>();;
 24     
 25     /**
 26      * 从文件加载配置
 27      * 
 28      * @param configurationFileName文件路径,如果为null则不执行任何操作
 29      * @throws 读取配置文件时抛出IOException IO异常
 30      */
 31     public ConfigurationUtils(String configurationFileName) throws IOException
 32     
 33         
 34         if (configurationFileName == null)
 35         
 36             return;
 37         
 38         
 39         InputStream inputStream = null;
 40         try
 41         
 42             ClassLoader classLoader = ConfigurationUtils.class.getClassLoader();
 43             if (null != classLoader)
 44             
 45                 inputStream = classLoader.getResourceAsStream(configurationFileName);
 46                 if(inputStream != null)
 47                     LOGGER.debug("get from classLoader");
 48                 
 49             
 50             
 51             if (null == inputStream && this.getClass() != null)
 52             
 53                 inputStream = this.getClass().getResourceAsStream(configurationFileName);
 54                 if(inputStream != null)
 55                     LOGGER.debug("get from class");
 56                 
 57             
 58             
 59             if (null == inputStream && configurationFileName.startsWith("/") && null != classLoader)
 60                 inputStream = classLoader.getResourceAsStream("." + configurationFileName);
 61                 if(inputStream != null)
 62                     LOGGER.debug("get from ./");
 63                 
 64             
 65             
 66             if (null == inputStream && configurationFileName.startsWith("/") && null != classLoader)
 67                 inputStream = classLoader.getResourceAsStream(configurationFileName.substring(1));
 68                 if(inputStream != null)
 69                     LOGGER.debug("get from no /");
 70                 
 71             
 72             
 73             if (null == inputStream)
 74             
 75                 inputStream = ClassLoader.getSystemResourceAsStream(configurationFileName);
 76                 if(inputStream != null)
 77                     LOGGER.debug("get from ClassLoader");
 78                 
 79             
 80             
 81             if (null == inputStream)
 82             
 83                 File file = new File(configurationFileName);
 84                 if(file.exists())
 85                     inputStream = new FileInputStream(configurationFileName);    
 86                     if(inputStream != null)
 87                         LOGGER.debug("get from file.");
 88                     
 89                 
 90             
 91             
 92             if (null == inputStream)
 93             
 94                 LOGGER.warn("configuration file  not found, ignore it.", configurationFileName);
 95                 return;
 96             
 97             
 98             Properties props = new Properties();
 99             props.load(inputStream);
100             for (Enumeration propNames = props.propertyNames(); propNames.hasMoreElements();)
101             
102                 String propName = (String)propNames.nextElement();
103                 propertyMapFromFile.put(propName, props.getProperty(propName));
104             
105             LOGGER.debug("propertyMapFromFile size : ", propertyMapFromFile.size());
106         
107         finally
108         
109             if (null != inputStream)
110             
111                 try
112                 
113                     inputStream.close();
114                 
115                 catch (IOException e)
116                 
117                     LOGGER.error("IOException: " + e);
118                 
119             
120         
121         return;
122     
123     
124     /**
125      * 获取属性的值字符串,如果该属性不存在,则返回defaultValue。
126      * 
127      * @param propertyName属性名称
128      * @param defaultValue默认值
129      * @return property value
130      */
131     
132     public String getProperty(String propertyName, String defaultValue)
133     
134         if (propertyMapExplicitlyDefined.containsKey(propertyName))
135         
136             return propertyMapExplicitlyDefined.get(propertyName);
137         
138         else if (propertyMapFromFile.containsKey(propertyName))
139         
140             return propertyMapFromFile.get(propertyName);
141         
142         else
143         
144             return defaultValue;
145         
146     
147     
148     public String getProperty(String propertyName)
149     
150         return getProperty(propertyName, null);
151     
152     
153     /**
154      * 设置属性的值。
155      * 
156      * @param propertyName属性名称
157      * @param value peoperty value
158      */
159     
160     public void setProperty(String propertyName, String value)
161     
162         propertyMapExplicitlyDefined.put(propertyName, value);
163     
164     
165 

 

以上是关于用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级)的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop-生产调优手册

mysql数据库性能调优总结积累

CIO:不容错过的DevOps自动化工具

了解下C# 文件的输入与输出

JVM命令行调优工具介绍

建议收藏大数据技术之 Hadoop(生产调优手册)