2007年10月16日

新注册了个独立域名,使用独立的blog了。

http://618119.com

rss订阅地址: http://feed.feedsky.com/lizongbo

从最早的 http://blog.csdn.net/lizongbo,

到 http://blog.donews.com/lizongbo

再到http://www.blogjava.net/lizongbo

现在终于拥有自己的域名和独立的blog了。

2005年02月06日

原文地址:http://jakarta.apache.org/commons/configuration/howto_properties.html

( lizongbo  @  gmail.com)

Properties文件

Properties 文件是配置程序的一种常用作法. Commons Configuration当然支持这种格式并且增强 java.util.Properties 这个类 这一节就是介绍PropertiesConfiguration 类的一些特性。

Loading 加载

At 首先,假设有个应用程序的所有配置信息都在一个叫“usergui.properties ”的properties 文件里,文件的内容如下:

# Properties definining the GUI
colors.background = #FFFFFF

要加载这个文件,你可以像下面这样写:

Configuration config = new PropertiesConfiguration("usergui.properties");

If 如果你可以使用文件的绝对路径,那么这个文件会自动在下面几个地方被搜寻:

  • 当前目录
  • 用户主目录
  • classpath

Includes 包含文件

If a 如果property文件里有叫做 “include“的键值对,并且值是一个 property文件名, 这么个文件也将被自动包含进配置信息中,举例如下:

# usergui.properties

include = colors.properties
include = sizes.properties
# colors.properties

colors.background = #FFFFFF

Automatic Reloading 自动重新加载

A common issue with properties file is to handle the reloading of the file when it changes. 通常你需要开启一个线程来监视配置文件的时间,并在文件被修改后重新加载进来。 Commons Configuration集成了这个加载机制, 如果需要使用自动加载,只需要在年id配置信息里声明一个自动重载策略:

PropertiesConfiguration config = new PropertiesConfiguration(“usergui.properties”);
config.setReloadingStrategy(new FileChangedReloadingStrategy());

现在你随时手动修改了usergui.properties 配置信息都能够自动刷新,修改后的值立即在程序里生效。

Saving 保存

调用save()方法就可以保存你的配置:

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save();

你也可以复制一份配置保存到另外一个文件:

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save("usergui.backup.properties);

如果你不想在配置信息改变之后费心的手动保存文件,你可以激活自动保存模式::

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setAutoSave(true);
config.setProperty("colors.background", "#000000); // the configuration is saved after this call

Lists and arrays

Commons Configuration 可以很轻松的返回一组值, 例如你的文件包含了用逗号分割的一组数据:

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

你不用手动拆分字符串,可以直接作为数组返回:

String[] colors = config.getStringArray("colors.pie");

另外一种作法, 你可以通过多行的同名键值对,来返回一组值。

# chart colors
colors.pie = #FF0000;
colors.pie = #00FF00;
colors.pie = #0000FF;

变量窜改

如果你熟悉Ant或者Maven,你肯定已经用到 (像 ${token})这样可以在配置文件被加载时自动扩充的变量。 Commons Configuration 也支持这样的特性, 下面是个示例:

application.name = Killer App
application.version = 1.6.2

application.title = ${application.name} ${application.version}

特殊字符

如果你需要用到一些特殊字符,比如换行符,制表符,或者unicode字符,你需要进行字符转义,字符串分隔符(默认的是逗号“,”)也需要被转义  :

key = This \n string \t contains \, escaped \\ characters \u0020

原文地址:http://jakarta.apache.org/commons/configuration/overview.html

使用 Configuration

看下面的例子可以尽快学会怎样使用Configuration ,接下来开始示范怎样从多根不同来源获取配置。

Configuration Sources配置文件

Currently there are quite a number of different sources of Configuration objects. But,

现在有很多种配置信息的来源,通过象 XMLConfiguration 或者JNDIConfiguration的类型来使用一个Configuration 对象,获得配置信息的底层细节是透明的. 这些配置信息的来源有:  

  • PropertiesConfiguration 从 properties文件中加载配置信息。.
  • BaseConfiguration 直接在内存中生成配置信息的方法。
  • XMLConfiguration 从xml文件中获取配置信息。.
  • JNDIConfiguration 通过JNDI树来使用属性关键词,可以当作配置属性值。
  • ConfigurationConverter 读取java.util.Properties 或者o.a.c.collections.ExtendedProperties 并把它们转换成一个 Configuration 对象.

 混合的配置源

你常常需要提供一个配置信息的基本设置,并且允许用户根据自己的特定环境很方便的修改它们。一种方法是在代码中对默认值使用硬编码写死,同时提供一个property文件来来覆盖默认值。这是一种很死板的做法. 取而代之的是, 通过CompositeConfiguration 你可以提供多种设置配置信息的途径。 你可以手工来实现(请参考JUnit testcase “TestCompositeConfiguration.java),也可以借助ConfigurationFactory 来完成。

通过 ConfigurationFactory, (请参考 the Junit testcase “TestConfigurationFactory.java”) 加载一个可以区别各种 Configuration 对象的摘要xml文件. 下面是一个配置文件示例digesterRules.xml file:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<configuration>
  <jndi className="org.apache.commons.configuration.JNDIConfiguration" prefix="java:comp/env"/>
  <properties className="org.apache.commons.configuration.PropertiesConfiguration" fileName="conf/test.properties"/>
  <xml className="org.apache.commons.configuration.XMLConfiguration" fileName="conf/test.xml"/>
</configuration>
这个文件声明了需要加载所有在java:comp/env下的JNDI键值对,还有一个properties文件conf/test.properties ,以及一个xml文件conf/test.xml。请阅读测试用例和conf/ 目录下的文件来获得更多的关于怎么构造配置文件的信息。

加载配置的优先级是从第一个配置开始直到最后一个。因此在上面这个例子中.假设有一个叫 “test.precendence “的JNDI 键值对  ,在xml文件里也有一个叫 “test.precendence “,的键值对那么来自 JNDI的对应值被优先返回,而不会是在xml文件里的这个值。 这样就允许你覆盖通过在一个 properties/xml file,中设置默认值,而通过JNDI或者另外的XML/properties文件来覆盖默认值!!!

 

配置细节

Configuration is done by taking the configuration XML file and using included Digester rules, parsing the individual configurations. Make sure to include the various dependencies required for each type of configuration!

典型的  Properties 文件       
  <properties className=”org.apache.commons.configuration.PropertiesConfiguration” fileName=”conf/test.properties”/>
  
       

这个配置描述很简单,你只需要说明property文件的路径即可. 

XML属性文件

  <xml className="org.apache.commons.configuration.XMLConfiguration" fileName="conf/test.xml"/>

这个配置和典型的 properties 文件很相似. 然而, xml文件必须满足特定的格式,当前xml文件没有DTD.约束。

<baseElement>
  <element>value</element>
  <element2>
    <subelement>
      <subsubelement>I'm complex!</subsubelement>
    </subelement>
  </element2>
  <test>
    <short>8</short>
  </test>
</baseElement>

在上面的例子中,根元素是被忽略掉的。 因此要得到“8”这个值,你应该从配置中通过键值对“test.short”来获取,根元素可以使用任意值。

JNDI Properties File

  <jndi className="org.apache.commons.configuration.JNDIConfiguration" prefix="java:comp/env"/>

在例如设置邮件服务器这样的特定环境使用这个配置非常有用! 下面的前缀告诉了ConfigurationFactory 获取你的设置的根节点。      
    <env-entry>
        <env-entry-name>smtp</env-entry-name>
        <env-entry-value>127.0.0.1</env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
   
    <env-entry>
        <env-entry-name>test/short</env-entry-name>
        <env-entry-value>80</env-entry-value>
        <env-entry-type>java.lang.Short</env-entry-type>
    </env-entry>

  
       

注意! 如果你有一个叫”test.short”的属性,如果使用了空格在里面,将被转换成 键值对”test/short”. 因此,你不能给在来自JNDI的属性名字里使用空格!  如果你需要使用到这样的键值对, 请确信你把web.xml里的“.”,转换成了“/”,同上面的例子一样。

英语原文在

 

 简介

Commons Configuration 提供一个了通用接口,它可以使应用程序通过多种途径读取配置信息。
Commons Configuration 根据实际情况来得到单个或者多个的参数值。示例代码如下:
Double double = config.getDouble("number");
Integer integer = config.getInteger("number");
配置参数可以从以下来源获取: 
  • Properties 文件
  • XML 文件
  • JNDI
  • JDBC 数据源
  • System properties
  • Applet parameters
  • Servlet parameters
不同的配置文件可以通过ConfigurationFactoryCompositeConfiguration来混合在一起使用,
配置参数通过定制的configuration 对象来创建,通过继承 AbstractConfiguration能够实现自定义的configuration 。

完整的 Configuration API 在 这里 .

最新发布

 Apache Jakarta Commons Configuration 最新发布版本在 这里 . 也可以在 IBiblio 获取 . The Changes Report explains all of the changes and bug fixes that have been made.

历史

Commons Configuration 开始出现于Apache JServ的代码中. The JServ 的代码随后被加入到了Jakarta Turbine . 在Jakarta Turbine之后, 配置接口被移到Jakarta Velocity ,并进行了大量的改进. 在 Velocity之后, 代码被作为ExtendedProperties介绍到了Jakarta Commons 里。Configuration 作为沙盒组件开始出现在Commons 中, 在2003年末,被提升为 Commons 专有组件。.

(正赶上Configuration的文档在升级,Last published: 05 February 2005 | Doc for 1.1RC1 ,可能会出现一些不同。)