现在的位置: 首页 > 综合 > 正文

Jakarta-Common-Configuration使用笔记

2013年09月10日 ⁄ 综合 ⁄ 共 4535字 ⁄ 字号 评论关闭

这是一个读取配置文件的工具包。

下载地址 : http://commons.apache.org/configuration/

A.读取XML配置文件:

<config>
    
<ip>10.10.1.1</ip>
    
<account>jini</account>
    
<password>jakarta99</password>
    
<roles>
        
<role>admin</role>
        
<role>manager</role>
        
<role>user</role>
    
</roles>
</config>

测试代码:

package demo;

import java.util.List;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

public class XMLConfigurationDemo {

    
public static void main(String[] args) throws ConfigurationException {

        Configuration config 
= new XMLConfiguration(XMLConfigurationDemo.class
                .getResource(
"/demo/system-config.xml"));
        String ip 
= config.getString("ip");
        String account 
= config.getString("account");
        String password 
= config.getString("password");
        List
<?> roles = config.getList("roles.role");

        System.out.println(
"IP: " + ip);
        System.out.println(
"Account: " + account);
        System.out.println(
"Password: " + password);

        System.out.println(
"★★★★★ Roles Begin ★★★★★");
        
for (int i = 0; i < roles.size(); i++{
            System.out.println(
"Role: " + roles.get(i));
        }

        System.out.println(
"★★★★★  Roles End  ★★★★★");
    }

}

B.读取Properties配置文件:

ip=10.10.1.1
account=jini
password=jakarta99
role1=admin
role2=manager
role3=user

colors.pie = #FF0000, #00FF00, #0000FF

测试代码:

package demo;

import java.util.List;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

public class PropertiesConfigurationDemo {

    
public static void main(String[] args) throws ConfigurationException {

        Configuration config 
= new PropertiesConfiguration(
                PropertiesConfigurationDemo.
class
                        .getResource(
"/demo/system-config.properties"));
        String ip 
= config.getString("ip");
        String account 
= config.getString("account");
        String password 
= config.getString("password");
        String role1 
= config.getString("role1");
        String role2 
= config.getString("role2");
        String role3 
= config.getString("role3");

        System.out.println(
"IP: " + ip);
        System.out.println(
"Account: " + account);
        System.out.println(
"Password: " + password);

        System.out.println(
"★★★★★ Roles Begin ★★★★★");
        System.out.println(
"Role1: " + role1);
        System.out.println(
"Role2: " + role2);
        System.out.println(
"Role3: " + role3);
        System.out.println(
"★★★★★  Roles End  ★★★★★");

        String[] colors 
= config.getStringArray("colors.pie"); 
        System.out.println(
"★★★★★ Use StringArray Begin ★★★★★");
        
for (int i = 0; i < colors.length; i++{
            System.out.println(colors[i]);
        }

        System.out.println(
"★★★★★  Use StringArray End  ★★★★★");
        
        List
<?> colorList = config.getList("colors.pie");
        System.out.println(
"★★★★★ Use List Begin ★★★★★");
        
for (int i = 0; i < colorList.size(); i++{
            System.out.println(colorList.get(i));
        }

        System.out.println(
"★★★★★  Use List End  ★★★★★");
    }

}

C.常见的配置资源 
#  PropertiesConfiguration 
从一个 property 文件中加载配置 .
# XMLConfiguration
XML 文件中加载配置信息 .
# PropertyListConfiguration
从一个 .plist 文件中加载配置信息 . XMLPropertyListConfiguration 也可以读取 XML Mac OSX 使用变量 .
 
# JNDIConfiguration
利用 jndi 树的一个键值,可以返回一个值,这个值来作为配置信息
# BaseConfiguration
访问内存中的一个配置对象 .
# HierarchicalConfiguration
一个在内存中的配置对象,这个对象可以处理复杂的数据结构 .
# SystemConfiguration
一个利用系统属性的配置信息
# ConfigurationConverter
java.util.Properties 或者   org.apache.collections.commons.ExtendedProperties 转化为一个 Configuration 对象

D.混合使用多种资源

经常你希望提供一套基本的配置信息,而且允许用户很容易的根据他们的特有的环境覆盖他们。
    
一种办法就是载你的代码中队默认值进行硬编码,并且提供一个配置文件来覆盖他们。   这是做法没有一点弹性。替换做法是:运用 CompositeConfiguration
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();
上面的config.xml是一个配置描述符。它定义了将要被装载的配置对象(资源文件),例如:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<configuration>
<system/>
<properties fileName="application.properties"/>
</configuration>

上面的config.xml是一个配置描述符。它定义了将要被装载的配置对象(资源文件),例如:
上面的意思是,我们加载了系统的配置,也加载了application.properties这个文件。
他的优先(precedence)顺序是从前到后。所以在上面的例子中,如果一个属性在系统配置中没有,他将在文件配置中查找。这将允许你在文件配置中设定默认值,而且可以在系统配置中覆盖他们。

抱歉!评论已关闭.