2013-10-02 36 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); 

添加一个属性不会删除现有的,设置它们。

相关问题