Commons Configuration 2.xバージョンについて
7426 ワード
Apache Commons Configurationはすでに2.xのバージョンにアップグレードされていますが、国内の多くのブログではこのフレームワークを紹介する際に、1.xバージョンに基づいているので、2.xバージョンと1.xバージョンの違いを簡単に紹介します.
1.構造が変化した;
1.xの場合:
2.x:
2.読み書き構成データのコンフィギュレーションインタフェースの変化は大きくない
次のように、1.xバージョンの方法で使用できます.
getProperties(getPropertiesFilePath()など.
3.主な違いは、構成オブジェクトを作成、初期化、管理する方法です.
特に、PropertiesConfigurationorやXMLConfigurationのようなファイルベースの構成では、1.xの構築方法はすぐに構成インスタンスをロードします.1.xの場合、以下の方法で作成します.
コードは簡単でしょう.しかし,明らかでない問題もあり,1)一部の設定が構成に影響するデータがある.コンフィギュレーション・アイテムの区切り記号と許可された識別子もコンフィギュレーション値に読み込まれます.2)構成方法は構成データのためにprotected方法を呼び出した.これは、インスタンスが初期化されていないため、いくつかの小さな問題を引き起こします.3)種々のsetメソッドはスレッドが安全ではない.構成されたインスタンスが他のスレッドによって呼び出された場合......
4.動的更新方式の書き方も全く違います.
実際には、動的更新を完全に使用して構成項目をロードすることができますよね?
1.構造が変化した;
1.xの場合:
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
2.x:
import org.apache.commons.configuration2.FileBasedConfiguration;
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.configuration2.reloading.PeriodicReloadingTrigger;
2.読み書き構成データのコンフィギュレーションインタフェースの変化は大きくない
次のように、1.xバージョンの方法で使用できます.
private PropertiesConfiguration properties;
properties.getString.....
properties.getFloat.....
getProperties(getPropertiesFilePath()など.
3.主な違いは、構成オブジェクトを作成、初期化、管理する方法です.
特に、PropertiesConfigurationorやXMLConfigurationのようなファイルベースの構成では、1.xの構築方法はすぐに構成インスタンスをロードします.1.xの場合、以下の方法で作成します.
// Version 1.x: Initializing a properties configurationPropertiesConfigurationconfig=newPropertiesConfiguration("myconfig.properties");
config.setThrowExceptionOnMissing(true);
config.setIncludesAllowed(false);
config.setListDelimiter(';');
コードは簡単でしょう.しかし,明らかでない問題もあり,1)一部の設定が構成に影響するデータがある.コンフィギュレーション・アイテムの区切り記号と許可された識別子もコンフィギュレーション値に読み込まれます.2)構成方法は構成データのためにprotected方法を呼び出した.これは、インスタンスが初期化されていないため、いくつかの小さな問題を引き起こします.3)種々のsetメソッドはスレッドが安全ではない.構成されたインスタンスが他のスレッドによって呼び出された場合......
4.動的更新方式の書き方も全く違います.
実際には、動的更新を完全に使用して構成項目をロードすることができますよね?
private boolean initializeConfig() {
try {
logger.debug("LOADING PROPERTIES........");
Parameters params = new Parameters();
File propertiesFile = new File(URLDecoder.decode(getPropertiesFilePath(), UTF_8));
ReloadingFileBasedConfigurationBuilder reloadbuilder = new ReloadingFileBasedConfigurationBuilder(
PropertiesConfiguration.class)
.configure(params.fileBased().setEncoding(UTF_8).setFile(propertiesFile));
logger.debug("SETTING PROPERTIES TO AUTO SAVE........");
reloadbuilder.setAutoSave(true);
PeriodicReloadingTrigger trigger = new PeriodicReloadingTrigger(reloadbuilder.getReloadingController(),
null, 1, TimeUnit.MINUTES);
trigger.start();
properties = (PropertiesConfiguration) reloadbuilder.getConfiguration();
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncodingException in AbstractConfigUtil.initializeConfig()", e);
} catch (ConfigurationException e) {
logger.error("ConfigurationException in AbstractConfigUtil.initializeConfig()", e);
}
isSucess = properties != null;
return isSucess;
}
public boolean isSucess() {
return isSucess;
}
private String getPropertiesFilePath() {
logger.info("LOAD PROPERTIES FROM: "
+ Thread.currentThread().getContextClassLoader().getResource(getPropertiesFilename()).getPath());
return Thread.currentThread().getContextClassLoader().getResource(getPropertiesFilename()).getPath();
}
//description properties ,properties resources
public abstract String getPropertiesFilename();