转载自(https://my.oschina.net/u/2000201/blog/486327)

1    简介

Commons Configuration软件类库提供通用配置接口,使Java应用程序从多种源读取配置文件。Commons Configuration提供简单类型访问和通过以下代码演示的多义配置参数:

Double double = config.getDouble("number");

Integer integer = config.getInteger("number");

配置参数可以从以下源加载:

  • Properties文件

  • XML文档

  • Property list文件

  • JNDI

  • JDBC DataSource

  • 系统配置

  • Applet参数

  • Servlet参数

Configuration对象使用配置构建起创建。不同的配置源可以使用CombinedConfigurationBuilder和CombinedConfiguration混合使用。可以使用扩展AbstractConfiguration或AbstractHierarchicalConfiguration的自定义配置对象创建额外的配置参数源。

2    使用Configuration对象

Commons Configuration允许你从各种不同的源访问配置属性。不管它们以properties文件、XML文档或JNDI树存储,都能通过通用Configuration接口的相同方式访问。

Commons Configuration的其它优势是可以混合异构配置源并且像简单逻辑配置处理。本文将介绍不同的配置和如何联合使用。

2.1    Configuration源

当前有大量Configuration对象的不同源。但是,但是只使用Configuration对象和一个特定类型,像XMLConfiguration或JNDIConfiguration,你躲避了实际检索配置值的机制。这些源包括:

  • PropertiesConfiguration从properties文件加载配置值。

  • XMLConfiguration从XML文档获取值。

  • INIConfiguration从Windows的.ini文件加载值。

  • PropertyListConfiguration从OpenStep .plist文件加载值。XMLPropertyListConfiguration也能读取Mac OS X使用的XML变体。

  • JNDIConfiguration使用JNDI树中的键,检索配置属性值。

  • BaseConfiguration内存中填充Configuration对象的方法。

  • HierarchicalConfiguration内存中能够处理复杂结构数据的Configuration对象。

  • SystemConfiguration使用系统属性的配置。

  • ConfigurationConverter需要一个java.util.Properties或一个org.apache.commons.collections.ExtendedProperties并转换它为一个Configuration对象。

2.2    混合Configuration源

通常你想要提供一组基本配置值,但允许用户易于在特定环境覆盖它们。一种方法是硬编码默认值到你的代码中,然而提供一个属性文件覆盖它。然而,这时非常死板的事情。使用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是上面例子的配置描述符,它指定加载的Configuration对象。下面是描述符的例子:

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

<configuration>
  <system/>
  <properties fileName="application.properties"/>
</configuration>

这说的是我们正在加载所有的系统属性,以及application.properties配置文件。优先顺序是从头到尾。因此,在上面的例子中,如果一个属性没有在系统配置中找到,它将在属性文件中查找。这允许你在配置文件中设置默认值,并使用系统属性覆盖它们。

2.3    Configuration接口

该包中的所有类代表共享单个接口Configuration的不同种类的配置源。该接口允许你以通用方式访问和操作配置属性。

Configuration接口中定义的方法可以分为从配置中查询数据和修改配置对象的方法。实际上,Configuration接口扩展一个基础接口ImmutableConfiguration。ImmutableConfiguration定义的 所有方法从配置中读取数据对象不能改变它的状态。Configuration添加了操作配置的方法。

定义在ImmutableConfiguration接口中的大部分方法处理不同数据类型的属性检索。所有这些方法需要一个键作为参数指向期望的属性。该字符串值明确依赖于具体Configuration实现。它们尝试通过传入key查找特定属性并转换为它们的目标类型;转换值将被返回。所有方法也有重载变体允许指定默认值,如果属性没有找到,将返回默认值。支持以下开箱即用的数据类型:

  • BigDecimal

  • BigInteger

  • boolean

  • byte

  • double

  • float

  • int

  • long

  • short

  • String

这些方法的名称以get开头后随它们的数据类型。getString()方法将返回字符串值,getInt()将对整数值起作用。属性可以有多个值,因此它也可以查询一个包含所有有效值的列表或数组。这使用getList()或getArray()方法完成。

此外,有一组通用get方法尝试转换请求属性值到指定数据类型。该转换也支持集合或数组元素。

如果配置设置组织在特定接口中subset()方法是有用的,而应用程序只对该结构的部分感兴趣。subset()传入key前缀字符串并返回一个Configuration对象只包含键开始的前缀。

以下方法能用于操作属性或它们的值:

addProperty()

添加一个新属性到配置中。如果该属性已经存在,其它值被添加到它(因此它变成一个多值属性)。

clearProperty()

从配置删除指定属性。

setProperty()

覆盖指定属性的值。这和删除属性然后调用带有新属性值的addProperty()相同。

clear()

清空配置。

2.4    不可变配置

Commons Configuration类库提供的大多数实现Configuration接口的类,例如,它们允许客户端代码改变它们的内部状态。对于一些使用情况,这可能不理想。例如,一个应用程序可能想要保护和兴配置对象不收子模块控制完成修改。

转换Configuration对象为ImmutableConfiguration是很简单的方式:只用传入配置到ConfigurationUtils工具类中的unmodifiableConfiguration()方法。这将生产一个包含和原始配置相同数据的不可变配置。

2.5    线程问题

当从多线程访问配置时——它是只读或是操作方式——这个问题在于是否Configuration是否实现线程安全。不可变配置是线程安全的,因为不可变对象可以在多线程中安全共享。然而,ImmutableConfiguration对象通过ConfigurationUtils包装一个可变的Configuration对象创建。因此如果代码持有一个底层Configuration引用,它一直能改变。

因为并发是复杂主题,将在之后专门讲解。

Commons Configuration之一简介的更多相关文章

  1. Apache Jakarta Commons 工具集简介

    Apache Jakarta Commons 工具集简介[转] Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文 ...

  2. commons configuration管理项目的配置文件

    Commons Confifutation commons configuration可以很方便的访问配置文件和xml文件中的的内容.Commons Configuration 是为了提供对属性文件. ...

  3. 使用Apache Commons Configuration读取配置信息

    在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架——Apache Commons Configuration framework. 你会了 ...

  4. apache commons Java包简介

    更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanU ...

  5. Apache Commons Configuration读取xml配置

    近期项目自己手写一个字符串连接池.因为环境不同有开发版本.测试版本.上线版本.每一个版本用到的数据库也是不一样的.所以需要能灵活的切换数据库连接.当然这个用maven就解决了.Apache Commo ...

  6. Apache Commons configuration使用入门

    使用Commons  Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...

  7. Java的commons包的简介

    Jakarta Commons是Jakarta的一个子项目,目的是创建和维护独立于其他框架和产品的程序包(packages).Jakarta Commons项目源于重用,其中的程序包必须确保能够重用. ...

  8. Commons Configuration之三Properties文件

    转载自(https://my.oschina.net/u/2000201/blog/486653) Properties文件是流行的应用程序配置文件.当然,Commons Configuration支 ...

  9. Commons Configuration之二基本特性和AbstractConfiguration

    Configuration接口定义一大堆方法.一切从头开始实现这些方法非常困难.因为AbstractConfiguration类存在.该类在Commons Configuration中充当大多数Con ...

随机推荐

  1. sublimeText前端必备插件

    安装完成后的sublime text,功能单纯地就像笔记本,然而,可以下载对应的插件,使得sublime text不仅仅局限于某一单一语言的编写,此处只提及到前端方面的使用,下面是前端一般使用到的插件 ...

  2. 2017-2018-2 20165330 实验三《敏捷开发与XP实现》实验报告

    实验内容 P基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件开发:即将软件需求分析.软件设计.软件构建.软件测试和软件维护这些相关技术和过程统一到一个体系中 敏捷开发:是一种以人为核 ...

  3. SQL Server 常用分页SQL(转)

    发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQ ...

  4. 网络编程 - UDP协议

    UDP协议 服务端 ''' UDP 协议 又称 数据报协议 SOCK_DGRAM ''' from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 ...

  5. C++应该被看成是个语言集合——四种语言(C语言,OO语言,泛型语言,STL)

    至少有三种语言: 一,C++ is C 二,C++ is an OO language 三,C++ is a genetic programming language 有的童鞋觉得难,可能是没有看清楚 ...

  6. linux伙伴系统接口alloc_page分析1

    在内核中分配内存,最后要通过伙伴系统接口进行实际物理页面的分配,一个重要的接口便是alloc_page.本文介绍下alloc_page的主要流程,各个部分的执行.主要包含正常分配流程,当页面不足的时候 ...

  7. 1. testNG+Maven 环境搭建

    一:使用的工具 : TestNG 6.9.10 Maven 3.5 IDEA 二:创建maven项目,在pom.xml添加依赖 <?xml version="1.0" enc ...

  8. Linux cal命令

    cal命令时查看日历的相关命令 1.用法 cal [选项] [[[日] 月] 年] 2.命令选项 -1, --one 只显示当前月份(默认) -3, --three  显示上个月.当月和下个月 -s, ...

  9. 如何用meavn构建mahout项目

    (1)下载meavn  解压到D盘

  10. Selenium的PageFactory & PageObject 在大型项目中的应用

    因为最近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候就是拿来即用,写什么功能啊,就按手动的操作步骤去转换,近日看到一个文章,又去wiki上查了查,觉 ...