加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Commons Configuration学习

发布时间:2020-12-15 22:21:35 所属栏目:百科 来源:网络整理
导读:注释:此文档属于原英文帮助文档翻译,可能有些不准确或遗漏 一、介绍 我们可以使用Commons Configuration 访问在属性文件和XML文件在存储的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。Commons
  

注释:此文档属于原英文帮助文档翻译,可能有些不准确或遗漏
一、介绍
我们可以使用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 elements  
  
List startCriteria = config.getList("start-criteria.criteria");  
  
  
  
// Retrieve the value of the first criteria element  
  
String firstCriteria = config.getString("start-criteria.criteria(0)");  
  
  
  
// Retrieve the type attribute of the first criteria element  
  
String firstCriteriaType = config.getString("start-criteria.criteria(0)[@type]");  
  
  
  
// Retrieve the horsepower as an int  
  
int 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=50  
  
threads.min=2  
  
timeout=15.52  
  
interactive=true  
  
color=red  
  
speed=50  
  
name=Default User  
  
  
Example 7-3. local .properties  
# Overrides Global Props  
  
threads.max=30  
  
speed=55  
  
  
Example 7-4. user. properties  
# Overrides Local Props  
  
threads.min=1  
  
color=black  
  
speed=5000  
  
name=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 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"));  
上面的代码传递一个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>  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读