Commons Configuration 学习
注釋:此文檔屬于原英文幫助文檔翻譯,可能有些不準確或遺漏
一、介紹
???? 我們可以使用Commons Configuration 訪問在屬性文件和XML文件在存儲的內容。Commons Configuration 是為了提供對屬性文件、XML文件、JNDI資源、來自JDBC Datasource數據的訪問。Commons Configuration 允許我們建立一個分等級的多級配置,在這種多級的配置中,local configuration可以選擇性的覆蓋默認配置。
二、解析屬性配置文件
???? 使用org.apache.commons.configuration包中的PropertiesConfiguration類裝載一個屬性文件后,可以提供對于number、arrays、list的訪問,下面的例子包括了3個屬性,speed 是一個浮點數NUMBER,name是一個用逗號分隔的字符列表,Correct是一個布爾類型。
?
speed=23.332
names=Bob,Gautam,Jarret,Stefan
correct=false
??? 這個名字為test.properties的屬性文件存儲在一個應用的工作目錄中,現在需要以上面說過的float, List, and boolean方式訪問3個屬性,以面的代碼建了一個PropertiesConfiguration對象,可以訪問每個屬性。
import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.PropertiesConfiguration;Configuration config = new PropertiesConfiguration( "test.properties" );float speed = config.getFloat("speed"));List names = config.getList("names"));boolean correct = config.getBoolean("correct");?
?
?
?
給PropertiesConfiguration構造方法傳遞的字符串參數指明了屬性文件的位置。PropertiesConfiguration比J2SE提供的Properties類有些改進。
?
三、解析XML配置文件
XML配置文件內容:?
<engine-config><start-criteria><criteria type="critical">Temperature Above -10 Celsius</criteria><criteria>Fuel tank is not empty</criteria></start-criteria><name><first>Tom</first><last>Payne</last></name><horsepower>42</horsepower></engine-config>?
?這個XML配置文件的內容可以被commons 提供的的的DOMConfiguration類加載, DOMConfiguration類使用Xerces XML 解析器把全部的XML文件解析為DOM 文件,,可以參照下面的實現:
import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.DOMConfiguration;String resource = "com/discursive/jccook/configuration/global.xml";Configuration config = new DOMConfiguration(resource);// Retrieve a list of all Criteria elementsList startCriteria = config.getList("start-criteria.criteria");// Retrieve the value of the first criteria elementString firstCriteria = config.getString("start-criteria.criteria(0)");// Retrieve the type attribute of the first criteria elementString firstCriteriaType = config.getString("start-criteria.criteria(0)[@type]");// Retrieve the horsepower as an intint horsepower = config.getInt("horsepower");?
傳一個字符串作為DOMConfiguration 構造方法的參數,DOMConfiguration從類路徑中裝這載XML文件作為一種資源,如果你需要從file對象中裝載XML配置文件,你可以傳File object.
DOMConfiguration僅在Xerves XML parser有用的時候(即在類編譯路徑中有相關類)時可用,如果沒有這個JAR包,我們可以利用XMLConfiguration另外的實現類:DOM4JConfiguration,這兩種方法使用DOM4J來解析XML文件,當然,這時你需要配置DOM4J的包。
?
四、形成復合的配置
???? 源碼中的解釋:屬性配置文件根據出現的定義順序,可以形成覆蓋關系。
???? 你的應用要求一個多層的配置(其實是就是多個配置文件,可以選擇用那套配置),這樣一些默認的屬性能被用戶定義的或者本地的配置選擇性的覆蓋。
???? 建立一個configuration.xml文件,這個文件包含了多個屬性文件,把這個文件傳給ConfigurationFactory. 這個ConfigurationFactory可以返回一個Configuration實現,這個實現包括了多個屬性文件的配置參數。
? 下圖是一個包括3層的屬性配置文件。
?
?
?? 有3個文件來存儲不同的配置文件:Example 7-2 (global.properties), Example 7-3 (local.properties), and Example 7-4
Example 7-2. global. properties threads.max=50threads.min=2timeout=15.52interactive=truecolor=redspeed=50name=Default UserExample 7-3. local .properties # Overrides Global Propsthreads.max=30speed=55Example 7-4. user. properties # Overrides Local Propsthreads.min=1color=blackspeed=5000name=Sean? configuration.xml文件提供了一個配置為ConfigurationFactory,這個文件做為一個資源被存儲在類路徑中,這個資源的路徑用ConfigurationFactory類的setConfigurationURL()方法設置。下面的這個configuration.xml將產生一個Configuration對象,它將會按照XML文件定義的順序裝載屬性文件中的屬性,如下面的例子:user.properties覆蓋local.properties,local.properties 覆蓋gloabal.properties.
<?xml version="1.0" encoding="ISO-8859-1" ?> <configuration><properties fileName="user.properties"/><properties fileName="local.properties"/><properties fileName="global.properties"/></configuration>?
import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.ConfigurationFactory;// Configure Factory ConfigurationFactory factory = new ConfigurationFactory( );URL configURL = this.getClass( ).getResource("configuration.xml");factory.setConfigurationURL( configURL );Configuration config = factory.getConfiguration( );// Print out propertiesSystem.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"));?上面的代碼傳遞一個configuration.xml資源的URL給ConfigurationFactory,返回一個Configuration實例,它將解析應用配置參數按照上面提到的規則。
??? 輸出結果如下:
Timeout: 15.52
Max Threads: 30
Name: Sean
Speed: 75
A configuration.xml file can also instruct a ConfigurationFactory to use a mixture of properties files and XML documents. The following configuration.xml instructs the ConfigurationFactory to create a Configuration instance that looks for properties from a properties file and an XML document:
?
<?xml version="1.0" encoding="ISO-8859-1" ?><configuration><properties fileName="test.properties"/><dom4j fileName="test.xml"/></configuration>?
總結
以上是生活随笔為你收集整理的Commons Configuration 学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse插件开发入门
- 下一篇: PropertySet 学习一