经常你希望提供一套基本的配置信息,而且允许用户很容易的根据他们的特有的环境覆盖他们。
一种办法就是载你的代码中队默认值进行硬编码,并且提供一个配置文件来覆盖他们。
CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new SystemConfiguration());
config.addConfiguration(new PropertiesConfiguration("application.properties"));
或者通过ConfigurationFactory这个类
ConfigurationFactory factory = new ConfigurationFactory("config.xml");
Configuration config = factory.getConfiguration();
或者这么写 (两种写法默认配置文件是在class-path下面)
ConfigurationFactory factory = new ConfigurationFactory();
URL url = ConfigurationUtil.class.getResources("config.xml")
factory.setConfigurationURL(url);
还有个写法可以定位到任何一个位置,它还可以接受带有“../”符号的相对路径,实现自由寻找资源的路径。
configurationFactory = new ConfigurationFactory();
写法一:
//System.out.println(ConfigurationUtil.class.getClassLoader().getResources("../config.xml"));
写法二:
URL url = Thread.currentThread().getContextClassLoader().getResource("../config.xml");
configurationFactory.setConfigurationURL(url);
上面的config.xml是一个配置描述符。它定义了将要被装载的配置对象(资源文件),例如:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<configuration>
<system/>
<properties fileName="application.properties"/>
</configuration>
读取属性文件的方式
方法一:
//com.rock.action是属性文件所在的包,application是属性文件名称,省略了.properties
ResourceBundle res = ResourceBundle.getBundle("com.rock.action.application");
String app_ip = res.getString("xiaochuan").trim();
System.out.println("app_ip="+app_ip);
方法二:
public final class Config {
private static Properties config;
private Config() {
};
static {
InputStream is = Config.class.getResourceAsStream("/upload-config.properties");
config = new Properties();
try {
config.load(is);
System.out.println("config ="+config);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Properties getConfig() {
return config;
}
}
使用:Config.getConfig().getProperty(“user-path”);