2

2 つのインスタンスorg.apache.commons.configuration.CombinedConfigurationを含むを使用します。org.apache.commons.configuration.XMLConfiguration1 つはデフォルト設定として使用され、私の JAR とともにデプロイされます。もう 1 つは、デフォルト値を上書きできるユーザー設定です。

インスタンスをロードするコードは次のとおりです。

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

たとえば、PATH_HSQL_DB起動時にパラメーターを変更します。3 回の起動後、パラメータは に割り当てられたファイルに 3 回保存されuserConfigます。

userConfigこれは、インスタンスにパラメーターを追加するコードです。

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

これを防ぐにはどうすればよいですか?

4

1 に答える 1

0

プロパティを設定するのではなく、プロパティを追加しています。使用する

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

プロパティを追加しても既存のプロパティは削除されませんが、設定すると削除されます。

于 2016-03-07T13:30:54.480 に答える