`

Apache Commons Configuration 使用

    博客分类:
  • JAVA
 
阅读更多

项目开发过程中不免有许多在运行过程中需要经常改动的参数,比如说数据库的连接参数等。把这些需要经常改动的参数保存在配置文件中,让用户可以修改,这样既增强了项目的适应能力,也减少了我们的维护成本。这种做法不失为一个很好选择。

不过,这并不是一个很新的技巧,在很早的Windows版本中就有大量的INI文件,还有功能更加强大的注册表。在课堂上我们已经学习了把Oracle的配置参数保存在属性文件(.properties)中,在运行的过程中读取使用,使用也比较简单,只需要查看一下Sun的JDK帮助文档,找到Properties类,使用该类的load()方法加载.properties文件,并用里面提供的getProperties(key)方法读取属性值就可以了。

但是使用properties文件也有它的不足之处,另外一种选择就是把配置参数保存在XML文件中,使用Apache 提供的Commons Configuration进行读取。Configuration可以操作如下类型的文件:
Properties files 
XML documents 
Windows INI files 
Property list files (plist) 
JNDI 
JDBC Datasource 
System properties 
Applet parameters 
Servlet parameters 
今天就给大家举个用Apache Commons Configuration读取XML文件的例子,首先到http://apache.org下载Commons Configuration的jar包,最新版本是commons-configuration-1.5.jar并且还需要同时下载:
commons-lang-2.3.jar
commons-collections-3.2.jar
commons-logging-1.1.1.jar
这三个包是必须的,我下载的都是最新版本,版本不统一可能会出现问题,可以自己试验一下.我用的开发工具是Eclipse3.2。
使用Eclipse创建一个JAVA项目,在项目的根目录下创建一个AppConfig.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<项目配置>  
  <应用程序配置参数>
    <考勤时间>
      <上班时间>08:00:00</上班时间>
      <下班时间>17:00:00</下班时间>
      <迟到矿工时间分界点>08:30:00</迟到矿工时间分界点>
    </考勤时间>
    <加班费>30</加班费>
    <满勤奖>35</满勤奖>
    <个人所得税起征额>1000</个人所得税起征额>
  </应用程序配置参数>
</项目配置>
然后再创建一个测试类:
package org.xdf.learn.conf;

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

public class Test {

/**
 * @param args
 */
  public static void main(String[] args) {
    String file = "AppConfig.xml";
    try {
      XMLConfiguration config = new XMLConfiguration(file);
      System.out.println("成功加载:" + file);
      String btime = config.getString("应用程序配置参数.考勤时间.上班时间");
      double basicm = config.getDouble("应用程序配置参数.个人所得税起征额");
      
      System.out.println("上班时间:" + btime);
      System.out.println("个人所得税起征额:" + basicm + "元");
    } catch (ConfigurationException e) {
      e.printStackTrace();
    }
  }
}

以下是测试结果:
成功加载:AppConfig.xml
上班时间:08:00:00
个人所得税起征额:1000.0元

 

 

 

相信大家在很多项目中已经见过类似的功能,比如说有时候我们修改Web项目的配置文件web.xml,Tomcat会自动重新启动我们的项目。Tomcat是怎么做到的呢,其实如果使用Commons Configuration的话,简单的很,只需要在原来的基础上再添加一句代码就够了:
config.setReloadingStrategy(new FileChangedReloadingStrategy());

下面我们编写一个Web项目测试一下这个功能,当然这个功能不是只能应用于Web项目。之所以选择Web项目,个人觉得这样做相对比较简单一些。
首先,创建一个Web项目:
Project name :CommonConfigurationAutomaticReloading
Web-root folder : WebRoot
Web Context-root :/ccar
然后,参考《Apache Commons Configuration使用入门》添加必要的包到项目的lib目录下,并添加到构建路径中,并把AppConfig.xml文件拷贝到项目的WEB-INF下。
接下来添加一个Servlet:
以下是web.xml中关于Servlet的配置,
<servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>servlets.TestServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
以下是Servlet的Java源代码,
package servlets;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

public class TestServlet extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    ServletContext application = this.getServletContext();
    XMLConfiguration config = (XMLConfiguration)application.getAttribute("appConfig");
    
    String btime = config.getString("应用程序配置参数.考勤时间.上班时间");
    double basicm = config.getDouble("应用程序配置参数.个人所得税起征额");
    
    System.out.println("上班时间:" + btime);
    System.out.println("个人所得税起征额:" + basicm + "元");
  }
  
  @Override
  public void init() throws ServletException {
    String path = this.getServletContext().getRealPath("/");
    String filename = path + "/WEB-INF/AppConfig.xml";
    
    try {
      XMLConfiguration config = new XMLConfiguration(filename);
      config.setReloadingStrategy(new FileChangedReloadingStrategy());
      
      System.out.println("成功加载:" + filename);
      
      ServletContext application = this.getServletContext();
      application.setAttribute("appConfig", config);
    } catch (ConfigurationException e) {
      e.printStackTrace();
    }
  }
}

最后,启动Tomcat并发布项目,控制台应该显示如下信息(类似):
成功加载:F:\jdev\apache-tomcat-6.0.14\webapps\ccar\/WEB-INF/AppConfig.xml
然后,打开浏览器,在地址栏里输入:http://localhost:8080/ccar/TestServlet并回车,控制台显示如下:

上班时间:08:00:00
个人所得税起征额:1000.0元

再修改AppConfig.xml的内容:
<个人所得税起征额>1000</个人所得税起征额> 
= 〉
<个人所得税起征额>2000</个人所得税起征额>

保存之后,控制台显示如下信息:
2007-12-26 9:09:47 org.apache.commons.configuration.AbstractFileConfiguration reload
信息: Reloading configuration. URL is file:/F:/jdev/apache-tomcat-6.0.14/webapps/ccar/WEB-INF/AppConfig.xml

回到浏览器,刷新一下,控制台显示如下:
上班时间:08:00:00
个人所得税起征额:2000.0元

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics