日期:2014-05-16  浏览次数:20953 次

【转载】使用Apache Commons Configuration读取配置信息
转载地址:http://my.oschina.net/jack230230/blog/57171
在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架——Apache Commons Configuration framework.


你会了解到

    ·从XML文件中获取数据
    ·访问环境变量
    ·连接不同类型的配置信息(基于XML的,基于环境变量的,等等)
    ·在程序改变后自动重新加载配置。

    在我们的示例中将会使用XML文件和环境变量的两种方式存储一个数据库的配置信息(开发、测试、产品,等等)。接下来你将会看到具体的内容,但是首先先配置一下Maven。

Maven设置
我们的示例程序需要在pom.xml文件中添加如下依赖:
<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.8</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
        <version>1.3</version>
    </dependency>
</dependencies>


简单的数据库配置
    设想我们有一个简单的数据库配置信息存储在XML文件中:

<?xmlversion="1.0"encoding="UTF-8"?>
<!-- const.xml -->
<config>
    <database>
        <url>127.0.0.1</url>
        <port>1521</port>
        <login>admin</login>
        <password>pass</password>
    </database>
</config>


    为了拿到url和port我们用如下的代码:

XMLConfiguration config =new XMLConfiguration("const.xml");
// 127.0.0.1
config.getString("database.url");
// 1521
config.getString("database.port");


    XMLConfiguration是一个Apache Commons类,他可以从指定的配置文件中加载内容,并且提供一个很好的以指定的点的方式得到存储的值。例如例子中的表达式database.port映射到xml文件中的 config/database/port节点的值“1521”。当然还有很多方式获取数据。这里有一些基本的用法:

getBoolean
getByte
getDouble
getFloat
getInt
getInteger
getList
getLong
getStringArray

    你可通过查看Apache Commons的JavaDoc查看更多的使用方式。

将如上配置扩展一步
    设想,过了一会我们想配置多个数据库,我们可以在配置文件中这样写:

<?xmlversion="1.0"encoding="UTF-8"?>

<!-- const.xml -->

<config>
    <databases>
        <database>
            <name>dev</name>
            <url>127.0.0.1</url>
            <port>1521</port>
            <login>admin</login>
            <password>pass</password>
        </database>
        <database>
            <name>production</name>
            <url>192.23.44.100</url>
            <port>1521</port>
            <login>admin</login>
            <password>not-so-easy-pass</password>
        </database>
    </datab
ases>
</config>
    现在我们要访问url数据我们可以这样:

XMLConfiguration config =new XMLConfiguration("const.xml");

// 127.0.0.1
config.getString("databases.database(0).url");

// 192.23.44.100
config.getString("databases.database(1).url");

    你可以看到这次多了参数,0代表第一个,1代表第二个。

XPath表达式
    定点的访问方式没问题,但是只是在一些简单的情况下,对于复杂的真实的状况来讲,我们可能需要使用XPath表达式语言。这里的主要优点是,即便你使用了XML的高级查询,程序看起来仍然比较简洁易懂。

XMLConfiguration config =new XMLConfiguration("const.xml");
config.setExpressionEngine(new XPathExpressionEngine());// 127.0.0.1

config.getString("databases/database[name = 'dev']/url"); 
// 192.23.44.100
config.getString("databases/database[name = 'production']/url");

  &n