- 開發工具: Netbeans7.0 (http://netbeans.org/)
- Web Server: Tomcat5.5 (http://tomcat.apache.org/)
- 所需套件:
- commons-configuration-1.6 (http://commons.apache.org/configuration/)
- commons-lang-2.6 (http://commons.apache.org/lang/)
注意: 不要用到 commons-lang3 以上, 因為 namespace 改變了. (後續說明) - commons-collections-3.2.1 (http://commons.apache.org/collections/)
- commons-logging (http://commons.apache.org/logging/)
因為 Tomcat 已有這個套件, 所以不用特別加入.
- 在 Netbeans 新增一個名為 CommonConfigurationTest 的 Web Application 專案.
- 將所需要的三個套件加到 Libraries 裡.
- 新增一個 other.properties 到專案的 com.test.util 下.
檔案內容可用 Properties Editor 進行編輯, 大致如下:
hello=this is a test
target.url=http://www.google.com - 新增一個 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, ""); } }
所以在專案中, 我們需要 commons-lang 這個套件, 但又因為 commons-lang3 以上的 namespace 已經改變(org.apache.commons.lang3), 僅能用 2.x 以下的版本.
再來說明為什麼要替換掉預設的分隔符號 ',' :
假如 properties 檔中有一個屬性是 "hello= Hi, guest”, 用預設的 getString() 會只得到 "Hi”.
原因在於預設是用 ',' 當分隔符號, 所以上述的值被拆成兩個值, 並且要用 getStringArray() 去讀取.
這對原本使用 java.util.Properties 的人來說一定覺得怪怪的. 所以在這邊就將符號換成 '\'.
另外, 我們可以從 ReloadingStrategy 這個 interface 知道有三種更新的方式:
- FileChangedReloadingStrategy: 只要檔案有異動就更新(reload).
- InvariantReloadingStrategy: 檔案異動也不會更新.
- ManagedReloadingStrategy: 透過 JMX 進行更新.
沒有留言:
張貼留言