?訪問Properties格式的配置文件
問題:
希望能以精確類型的方式訪問到配置信息,而不僅僅是String類型。
解決方案:
使用PropertiesConfiguration類可以加載并訪問properties格式的配置文件,并提供對數(shù)值型、數(shù)組型和List列表型配置信息的支持。
比如,有如下的配置信息:
speed=23.332 names=Bob,Gautam,Jarret,Stefan correct=false
|
可以像這樣來訪問他們:
Configuration config = new PropertiesConfiguration(getClass() .getResource("/resources/config.properties"));
float speed = config.getFloat("speed"); List names = config.getList("names"); boolean correct = config.getBoolean("correct");
|
傳遞給PropertiesConfiguration構(gòu)建函數(shù)的參數(shù)可以是文件名、可以訪問到文件的URL、以及文件本身(File對象)。當(dāng)然,Properties類也可以完成同樣的事情,但只支持返回String類型的值。
?訪問XML格式的配置文件問題:
希望使用XML格式的配置文件來配置應(yīng)用程序。
解決方案:
Configuration config = new XMLConfiguration("resources/config.xml"); List criterias = config.getList("start-criteria.criteria"); String criteria = config.getString("start-criteria.criteria(0)"); String type = config.getString("start-criteria.criteria(0)[@type]");//自己替換[] int horsepower = config.getInt("horsepower");
|
使用XMLConfiguration類可以加載并訪問XML格式的配置文件,訪問配置信息使用的是XPath格式 (XPath請參數(shù)相應(yīng)的XML文檔)。
傳遞給XMLConfiguration構(gòu)建函數(shù)的參數(shù)可以是文件名、可以訪問到文件的URL、以及文件本身(File對象)。
?訪問組合配置問題:
有時候應(yīng)用程序使用一種多層結(jié)構(gòu)的配置方式,即上一層的配置可以被下一層選擇性地覆蓋。
解決方案:
configuration.xml
<?xml version="1.0" encoding="ISO-8859-1" ?> <configuration> <properties fileName="user.properties" /> <properties fileName="local.properties" /> <properties fileName="global.properties" /> </configuration>
|
global.properties
threads.max=50 threads.min=2 timeout=15.52 interactive=true color=red speed=50 name=Default User
|
local.properties
# Overrides Global Props threads.max=30 speed=55
|
user.properties
# Overrides Local Props threads.min=1 color=black speed=5000 name=Sean
|
ConfigurationFactory factory = new ConfigurationFactory(); factory.setConfigurationURL(CfgTest3.class.getResource("/resources/configuration.xml")); Configuration config = factory.getConfiguration();
// print out properties System.out.println("Timeout: " + config.getFloat("timeout")); System.out.println("Max Threads: " + config.getString("threads.max")); System.out.println("Name: " + config.getString("name")); System.out.println("Speed: " + config.getInt("speed"));
|
創(chuàng)建一個聲明多個properties配置的configuration.xml文件,并傳遞給ConfigurationFactory,ConfigurationFactory解析這些properties配置,生成一個包含最終配置信息的Configuration實例,通過這個實例訪問到的配置信息,就是被覆蓋過的最終版本。
上面實例中的configuration.xml文件由多個<properties/>元素組成,覆蓋的順序由上往下,也就是說user.properties會覆蓋local.properties,local.properties會覆蓋global.properties。
其他:
configuration.xml文件可以使用如下的元素來聲明配置文件:
?<properties/> 用于聲明properties格式的配置文件
?<xml/>用于聲明xml格式的配置文件
除了可以訪問properties格式和xml格式的配置文件以外,Commons Configuration包還定義了JNDIConfiguration類來訪問JNDI樹格式的配置信息,具體的方法請參考其他相關(guān)文檔。