開門見山,本次介紹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包名不同等情況,都屬於改動不大,版本遷移時比較好修改。