2013-10-02 34 views
2

我使用的org.apache.commons.configuration.CombinedConfiguration包含兩個org.apache.commons.configuration.XMLConfiguration實例。一個用作默認配置,並使用我的JAR進行部署,另一個用戶配置可以覆蓋默認值。Apache Commons配置:啓用自動保存的重複條目

下面是一些代碼,加載實例:

XMLConfiguration defaultConfig = new XMLConfiguration(defaultConfigFileURL); 
    XMLConfiguration userConfig = new XMLConfiguration(extConfigFilePath); 
    userConfig.setAutoSave(AUTO_SAVE); 
    FileChangedReloadingStrategy strategy = new FileChangedReloadingStrategy(); 
    strategy.setRefreshDelay(FILE_REFRESH_RATE); 
    userConfig.setReloadingStrategy(strategy); 
    userConfig.setExpressionEngine(new XPathExpressionEngine()); 
    defaultConfig.setExpressionEngine(new XPathExpressionEngine()); 
    this.config = new CombinedConfiguration(); 
    this.config.setExpressionEngine(new XPathExpressionEngine()); 
    OverrideCombiner oc = new OverrideCombiner(); 
    this.config.setNodeCombiner(oc); 
    this.config.setThrowExceptionOnMissing(true); 
    this.config.addConfiguration(userConfig, "USER"); 
    this.config.addConfiguration(defaultConfig, "DEFAULT"); 

隨着AUTO_SAVE = trueuserConfig實例會自動將更改保存到這是工作,到目前爲止該文件。我的問題是,它增加了paramters多次這樣的配置文件看上去混亂:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<fst_configuration> 
<parameters> 
     <WS_PASS_TO_SAP>true</WS_PASS_TO_SAP> 
<PATH_CESA_DIR>C:\FST-RELEASE\FST\build\web\WEB-INF\cesa</PATH_CESA_DIR> 
<PATH_ERIC_WORK_DIR>C:\FST-RELEASE\FST\build\web\WEB-INF\eric</PATH_ERIC_WORK_DIR> 
<PATH_HSQL_DB>C:\FST-RELEASE\FST\build\web\WEB-INF\db</PATH_HSQL_DB> 
<PATH_HSQL_DB>C:\FST-RELEASE\FST\build\web\WEB-INF\db</PATH_HSQL_DB> 
<CESA_CMD_VERSION>17566520</CESA_CMD_VERSION> 
<PATH_HSQL_DB>C:\FST-RELEASE\FST\build\web\WEB-INF\db</PATH_HSQL_DB> 
<CESA_CMD_VERSION>17566520</CESA_CMD_VERSION> 
</parameters> 
(...) 

例如,我改變參數PATH_HSQL_DB在啓動時。 3次啓動後,參數將被分配到userConfig的文件中存儲3次。

這是增加了一個參數設置爲userConfig實例代碼:

(...) // value is a String 
String name = "PATH_HSQL_DB"; 
String keyString = String.format("/parameters/%s", name); 
userConfig.addProperty(keyString, value); 

我能做些什麼來防止這種情況?

+0

您可以加入其中插入PATH_HSQL_DB鍵/值的代碼? –

+0

我加了上面的代碼... –

+0

你有沒有解決過這個問題?我現在有同樣的問題。 – Holloway

回答

0

您正在添加屬性而不是設置屬性。使用

String name = "PATH_HSQL_DB"; 
String keyString = String.format("/parameters/%s", name); 
userConfig.setProperty(keyString, value); 

添加一個屬性不會刪除現有的,設置它們。

相關問題