Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Commons配置:启用自动保存的重复条目_Java_Configuration_Apache Commons Config - Fatal编程技术网

Java Apache Commons配置:启用自动保存的重复条目

Java Apache Commons配置:启用自动保存的重复条目,java,configuration,apache-commons-config,Java,Configuration,Apache Commons Config,我使用包含两个org.apache.commons.configuration.XMLConfiguration实例的org.apache.commons.configuration.CombinedConfiguration。一个用作默认配置并与我的JAR一起部署,另一个是可以覆盖默认值的用户配置 下面是一些加载实例的代码: XMLConfiguration defaultConfig = new XMLConfiguration(defaultConfigFileURL);

我使用包含两个
org.apache.commons.configuration.XMLConfiguration
实例的
org.apache.commons.configuration.CombinedConfiguration
。一个用作默认配置并与我的JAR一起部署,另一个是可以覆盖默认值的用户配置

下面是一些加载实例的代码:

    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=true
时,
userConfig
实例会自动保存到目前为止正在工作的文件的更改。我的问题是,它多次添加参数,因此配置文件看起来很混乱:

<?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>
(...)

如何防止出现这种情况?

您正在添加属性,而不是设置属性。使用

String name = "PATH_HSQL_DB";
String keyString = String.format("/parameters/%s", name);
userConfig.setProperty(keyString, value);
添加属性不会删除现有属性,设置属性会删除现有属性


你能添加插入路径\u HSQL\u DB键/值的代码吗?我添加了上面的代码…你解决过这个问题吗?我现在也有同样的问题。结果我的问题不同了(如果其他人有类似的问题)。
String name = "PATH_HSQL_DB";
String keyString = String.format("/parameters/%s", name);
userConfig.setProperty(keyString, value);