Apache Commons Configuration由1.X版本升級2.X指南

開門見山,本次介紹Apache Commons Configuration版本由1.X版本升級到2.X版本過程中所遇到的問題解決方法。

以下幾點需要注意:

1.Maven依賴

Apache Commons Configuration1.X版本(以1.10版本爲例)

<dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>
    <version>1.10</version>
</dependency>

Apache Commons Configuration2.X版本(以2.4版本爲例),由於2.X版本通過構建器初始化,這個過程需要藉助beanutils這個包

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-configuration2</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version>
</dependency>

2.初始化

Apache Commons Configuration1.X版本(以1.10版本爲例)

// 無參構造
PropertiesConfiguration config = new PropertiesConfiguration();
// 有參構造
PropertiesConfiguration config = new PropertiesConfiguration("myconfig.properties");

// 視情況set,
config.setThrowExceptionOnMissing(true);
config.setIncludesAllowed(false);
config.setListDelimiter(';');

Apache Commons Configuration2.X版本(以2.4版本爲例)

// 無參構造 與1.X相同
PropertiesConfiguration config = new PropertiesConfiguration();
// 有參構造,通過構建器builder
FileBasedConfigurationBuilder<PropertiesConfiguration> builder = new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class)
    .configure(new Parameters().properties()
        .setFileName("myconfig.properties")
        .setThrowExceptionOnMissing(true)
        .setListDelimiterHandler(new DefaultListDelimiterHandler(';'))
        .setIncludesAllowed(false));
PropertiesConfiguration config = builder.getConfiguration();

3.自動加載文件

Apache Commons Configuration1.X版本(以1.10版本爲例)

PropertiesConfiguration config = new PropertiesConfiguration("myconfig.properties");
ReloadingStrategy strategy = new FileChangedReloadingStrategy(); strategy.setRefreshDelay(5000);
config.setReloadingStrategy(strategy);

Apache Commons Configuration2.X版本(以2.4版本爲例)

Parameters params = new Parameters();
// Read data from this file
File propertiesFile = new File("config.properties");

ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> builder = new ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration(PropertiesConfiguration.class)
    .configure(params.fileBased().setFile(propertiesFile));
PeriodicReloadingTrigger trigger = new PeriodicReloadingTrigger(builder.getReloadingController(),
    null, 1, TimeUnit.MINUTES);
trigger.start();

(必須通過PeriodicReloadingTrigger的start()方法才能啓動自動加載)

4.讀取InputStream問題

Apache Commons Configuration1.X版本(以1.10版本爲例)

InputStream input;
PropertiesConfiguration config = new PropertiesConfiguration();
config.load(input);

Apache Commons Configuration2.X版本(以2.4版本爲例)

InputStream input;
PropertiesConfiguration config = new PropertiesConfiguration();
FileHandler fileHandler = new FileHandler(config);
fileHandler.load(input);

通過引入FileHandler類處理InputStream。

其他的import包名不同等情況,都屬於改動不大,版本遷移時比較好修改。

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