在javaweb开发的时候我们一般将数据库连接信息配置到db.properties中,然后再通过io读入到输入流里,再通过流来创建Properties对象,从而可以根据对象Properties的方法getProperty(key)来获得value值,完成整个功能很容易,又碰巧数据库连接参数配置文件通常只要读取一次就可以了,所以这样做确实没啥问题,但如果系统里有一个配置文件并且整个系统的不同地方要去读取它,还使用上述的方法么,用当然也没问题,但是会出现大量的重复的properties对象,造成资源浪费,因此我们需要写一个公共类来管理Properties,思路就是将一个配置文件的properties对象存入到HashMap中key为配置文件的名字,这样下次其它地方要用这个配置文件的参数就可以直接从HashMap中取了。
代码如下:
package com.shengsiyuan.imis.util;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class ConfigHelper {
//作为Properties缓存
public static Map<String, Properties> conf = new HashMap<String, Properties>();
public static URL findResource(String configName) {
URL resourceURL = null;
resourceURL = Thread.currentThread().getContextClassLoader().getResource(configName);
if (resourceURL != null) {
return resourceURL;
}
resourceURL = ConfigHelper.class.getResource(configName);
if (resourceURL != null) {
return resourceURL;
}
resourceURL = ClassLoader.getSystemClassLoader().getResource(configName);
return resourceURL;
}
public static Properties getProperties(String name) throws IOException {
Properties prop = conf.get(name);
if (prop == null) {
InputStream is = findResource(name).openStream();
prop = new Properties();
prop.load(is);
is.close();
conf.put(name, prop);
return prop;
}
return prop;
}
}