2011/08/18

[Java] Apache 的 Commons Configuration 入門

  1. 在 Netbeans 新增一個名為 CommonConfigurationTest 的 Web Application 專案.
  2. 將所需要的三個套件加到 Libraries 裡.
  3. 新增一個 other.properties 到專案的 com.test.util 下.
    檔案內容可用 Properties Editor 進行編輯, 大致如下:
    hello=this is a test
    target.url=http://www.google.com
  4. 新增一個 OtherConfigUtil.java 到 com.test.util 下.
    package com.test.util;
    
    import org.apache.commons.configuration.ConfigurationException;
    import org.apache.commons.configuration.PropertiesConfiguration;
    import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
    
    public class OtherConfigUtil {
      static PropertiesConfiguration config = null;
      static {
        try {
          /* 因為 PropertiesConfiguration 預設用',' 當 delimiter.
           所以這邊先 new 一個 PropertiesConfiguration, 等設定完 delimiter,
           再 load() 指定的 properties 檔 */
          config = new PropertiesConfiguration();
          config.setListDelimiter('\\');
          config.load("/com/test/util/other.properties");
          config.setReloadingStrategy(new FileChangedReloadingStrategy());
        }
        catch(ConfigurationException e) {
          System.err.println(e.toString());
        }
      }
      
      public static String getConfigValue(String key) {
        return config.getString(key, "");
      }
    }
由於 new PropertiesConfiguration 的時候會 throw ConfigurationException, 且這個 Exception 又繼承自 org.apache.commons.lang.exception.NestableException.
所以在專案中, 我們需要 commons-lang 這個套件, 但又因為 commons-lang3 以上的 namespace 已經改變(org.apache.commons.lang3), 僅能用 2.x 以下的版本.
再來說明為什麼要替換掉預設的分隔符號 ',' :
假如 properties 檔中有一個屬性是 "hello= Hi, guest”, 用預設的 getString() 會只得到 "Hi”.
原因在於預設是用 ',' 當分隔符號, 所以上述的值被拆成兩個值, 並且要用 getStringArray() 去讀取.
這對原本使用 java.util.Properties 的人來說一定覺得怪怪的. 所以在這邊就將符號換成 '\'.
另外, 我們可以從 ReloadingStrategy 這個 interface 知道有三種更新的方式:
最後補上一個此專案的架構圖:
專案架構圖

沒有留言: