Apache Commons Configuration 使用

項目開發過程中不免有許多在運行過程中需要經常改動的參數,比如說數據庫的連接參數等。把這些需要經常改動的參數保存在配置文件中,讓用戶可以修改,這樣既增強了項目的適應能力,也減少了我們的維護成本。這種做法不失爲一個很好選擇。

不過,這並不是一個很新的技巧,在很早的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元


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章