`
javafenger
  • 浏览: 246918 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Apache Jakarta Common Configuration, 系统配置, 工具包

阅读更多
在很多系统中,需要用到配置文件来存放配置参数。配置参数从代码中单独提出来主要是为了方便修改用的。常见的一个用法是将数据库连接参数(数据库服务器 IP,用户名,密码等等)写在一个配置文件中,这主要是系统可能会更换数据库,或者网络可能更换 IP 地址范围,或者服务器 IP 可能会变动等等。
  
  配置参数不仅限于配置文件,也可以保存在其他地方,比如数据库单独用一个表保存配置参数,或者在内存中,或者在操作系统环境变量中,等等。有个现成的读写配置数据工具包,让人感觉很不错。
  
  早期的配置文件主要用 ini 文件,或者类似 ini 文件格式。这种配置文件格式简单,相应的读写工具类也很容易写,各种开发语言基本上都能在网上找到现成的代码。其主要特点是 key <--> value 对应。ini 文件是纯文本文件,对于不是程序员的最终用户,修改 ini 配置文件也没有太多的难度。相比较而言,其他格式的配置都比 ini 有更大的难度。

  可惜的是 Common Configuration 工具包不支持 ini 格式。文档中说它支持的配置参数来源有:
  * Properties files
  * XML documents
  * Property list files (.plist)
  * JNDI
  * JDBC Datasource
  * System properties
  * Applet parameters
  * Servlet parameters

  数据形式也不限于 key <--> value 形式,Common Configuration 工具包也支持树形结构的参数配置。

  Common Configuration 工具包体系比较简单。一个基本的 Configuration interface 定义了各种配置通用的操作,一个 AbstractConfiguration 从 Configuration interface 下来将所有公用的操作实现了,留下一个不通用的函数 getProperty, setProperty 等待子类实现。真正有实际操作的 DatabaseConfiguration、PropertiesConfiguration、XMLConfiguration、XMLPropertiesConfiguration、MapConfiguration 等等,都是从 AbstractConfiguration 继承。MapConfiguration 是基于内存操作的配置参数读写工具类,XMLPropertiesConfiguration 则是基于 XML 文件的模仿 java properties 格式的配置文件读写工具类。有点怪吧?主要是因为 java property 文件本来设计只是为了存放多语言字符串用的,有的 java 程序员希望在 java 中有类似 INI 文件的配置文件,但是 JDK 中没有现成的工具类,只能用 property 文件凑合着用。举例来说, log4j 就可以用 property 格式的配置文件。但是这种格式的配置文件有个很大的弱点,如果里面包含非 ASCII 字符,比如说是中文,必须要写成 UNICODE 编码格式。如果软件交付给用户,用户需要改一个参数,用户没有办法改这种 property 文件。XMLPropertiesConfiguration 使用的是 XML 格式配置文件,一般用 UTF-8 编码,这种文件可以用常用操作系统自带的软件来修改(比如 windows 的记事本程序),因而更加方便。XML property 格式配置文件现在已经用得比较多了,在 J2SE 5.0 中也定义了一种 XML property 格式,这里的 XMLPropertiesConfiguration 工具类就是遵循这种格式标准。

  Configuration interface 定义了一些基本操作:addProperty, clear, clearProperty, containsKey, getBigDecimal, getBigInteger, getBoolean, getByte,getDouble,getFloat,getInt, getKeys, getList, getLong, getProperties, getProperty, getShort, getString, getStringArray, isEmpty, setProperty 等等。看起来还是比较齐全。也可以用 DataConfiguration 将已有的 Configuration 重新包装一下,然后可以读写其它类型的配置参数:URL, Locale, Date, Calendar, Color, 以及各种形式对象的  lists 和 arrays。DataConfiguration 主要做的事情是在读写配置数据的时候将这些额外的类型数据与 String 类型相互转换,最终所有配置参数还是保存成 String 形式。

  这里面还有另外一个类 CompositeConfiguration, 可以将几个 Configuration 并在一起用,这不太常见,偶尔会用到。举例来说,将数据库连接参数放在文件型配置文件中,将系统其他参数放在数据库中是一个比较常见的设计。如果几个程序员同时调试程序,可能需要将数据库中同一个配置参数设置成不同的值,这个时候就比较麻烦,要吵架了。这个时候可以将文件型配置和数据库配置做成一个组合配置CompositeConfiguration, 优先读取文件型配置中参数,如果文件型配置参数中没有才读取数据库中参数。这样就可以解决了。真正最后系统交付的时候把所有配置放在数据库中,只留下数据库连接配置放在文件型配置中。

  值得注意的是,有的 Configuration 性能不够优化,可能需要自己写一个相应的子类将 getProperty, setProperty 等函数重新写一下。现成的思路是,DatabaseConfiguration 每次 getProperty 都读取一次数据库,如果不是在集群环境,可以把所有配置数据一次读出放在一个 map 中,这样每次 getProperty 速度快很多。

  无论如何,Common Configuration 是一个非常优秀的 java 工具包。我注意到,在它的开发 roadmap 中,INI 格式配置计划在 1.3 版本中支持,应该说 INI 格式不难,不知道为什么要放到 1.3 版本中才能实现。1.3 版本还计划支持 windows 注册表格式的配置,个人觉得没有什么大的用处。其他有些稀奇古怪的计划,可能是有的开发人员提出的不太通用的一些要求。从目前的开发版本的 bugzilla 上面看,没有较核心的 bug ,比较让人放心,值得推荐。


分享到:
评论

相关推荐

    (最全)Apache Jakarta Commons 工具集及其API

    网上找不全,官网资源又太分散,自己动手,丰衣足食,这是我挨个下载的Apache jakarta commons,有windows与linux两版本(全都有源码),甚至分离出去的HttpClient都在其中,愿更多的人了解并使用Apache,这是一个...

    Apache Jakarta Commons 使用手册

    ### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...

    apache-jakarta旗下的所有开源项目jar文件

    apache-jakarta旗下的所有开源项目jar文件 apache-jakarta-commons-codec.jar apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-...

    Iverson book Apache Jakarta Commons[E文版]

    Apache Jakarta Commons是Apache软件基金会的一个项目集合,它提供了一系列实用工具类库,旨在简化Java开发。这个项目的主要目标是创建可重用的Java组件,这些组件涵盖了从数据处理到网络通信的各种领域。Iverson的...

    Jakarta commons\Apache Jakarta Commons Reusable Java Components.chm

    本书是一本介绍apache commons使用的电子书

    通过 Apache 的 Jarkata Common Email 来发送email

    Apache Jakarta Common Email 是一个强大的Java库,用于创建和发送电子邮件。这个库提供了丰富的功能,使得在Java应用程序中处理电子邮件变得更加简单。在这个项目中,我们将深入探讨如何使用Common Email库来发送...

    Java通过Apache提供的Commons Email工具类实现邮箱发送验证码

    本篇将深入讲解如何使用Apache Commons Email工具类来发送带有验证码的电子邮件。 首先,Apache Commons Email是Apache软件基金会的一个项目,它提供了一组丰富的API,简化了Java中发送电子邮件的过程。这个库包含...

    Jakarta common logging 简介 以及和其它日志系统结合使用

    Jakarta Common Logging(JCL)是Java开发中的一个标准日志接口,由Apache软件基金会的Jakarta项目开发。它提供了一种统一的方式来管理和记录应用程序的日志信息,允许开发者选择自己喜欢的日志实现,如Log4j、Java ...

    Apache Jakarta Commons- Reusable Java Components.doc

    Apache Jakarta Commons- Reusable Java Components

    Tomcat完整教程-TOMCAT是APACHE JAKARTA软件组织的一个子项目

    tomcat安装及配置教程---- TOMCAT是APACHE JAKARTA软件组织的一个子项目,TOMCAT是一个JSP/SERVLET容器,它是在SUN公司的JSWDK(JAVA SERVER WEB DEVELOPMENT KIT)基础上发展起来的一个JSP和SERVLET规范的标准实现...

    apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Apache的FTP库是Java开发中一个非常实用的工具,它主要包含了两个核心的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个包提供了丰富的功能,允许开发者在Java应用中实现FTP(文件传输协议)的...

    httpclient需要的jar包,合订版(httclient.jar,commons-codec,commons-logging)

    HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-...

    jakarta-commons 相关依赖包

    jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...

    Http是用java编写的用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包.rar

    HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache...

    apache-jakarta-oro.jar.zip

    Jakarta-ORO是最全面以及优化得最好的bai正则表达式API之一,duJakarta-ORO库以前叫做zhiOROMatcher,是由Daniel F. Savarese编写,后来他将其赠与daoJakarta Project。是面向JAVA的正则表达式库

    commons-httpclient-3.1

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际...

    HttpClient API CHM

    HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache...

    jakarta-taglibs 集合包

    Jakarta Taglibs是一个集合包,包含了不同版本的Jakarta服务器端标签库,这些标签库主要用于简化JavaServer Pages (JSP)开发。在Web应用程序的早期阶段,Jakarta Taglibs是提高开发效率和代码可维护性的重要工具。...

    jakarta-ant-optional的jar包

    Jakarta Ant Optional是Apache Ant项目的一个扩展库,它包含了Ant在执行特定任务时可能需要的一些非核心组件。Ant是一个广泛使用的Java构建工具,它允许开发者通过XML格式的构建文件来编译、打包、测试和部署Java...

    jakarta.rar

    包含jakarta.activation-api-1.2.1-1.2.2、jakarta.annotation-api-1.3.5、jakarta.validation-api-2.0.1-2.0.2、jakarta.xml.bind-api-2.3.2-2.3.3,全量包

Global site tag (gtag.js) - Google Analytics