组合配置文件

时间:2017-05-18 08:37:12

标签: apache-commons apache-commons-config

我正在开发一个jee应用程序,它必须查看两个文件才能加载配置参数。这两个文件都是类似属性的文件。

第一个包含默认配置属性,另一个包含它们。所以第一个是只读的,另一个可以修改。我需要做出反应并更新第二个配置文件所做的更改。

我看了几个资源:

我无法弄清楚使用commons-configuration2制作配置策略的内容和方式。

到目前为止,我已经能够从一个配置文件中读取:

FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
    new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class)
        .configure(new Parameters().properties()
            .setFileName(ConfigurationResources.PROPERTIES_FILEPATH)
            .setThrowExceptionOnMissing(true)
            .setListDelimiterHandler(new DefaultListDelimiterHandler(';'))
            .setIncludesAllowed(false));

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

Parameters params = new Parameters();

FileBasedConfigurationBuilder<FileBasedConfiguration> config1 = new FileBasedConfigurationBuilder<FileBasedConfiguration>(
        PropertiesConfiguration.class)
                .configure(params.properties().setFileNamesetFileName("file1.properties")));
FileBasedConfigurationBuilder<FileBasedConfiguration> config2 = new FileBasedConfigurationBuilder<FileBasedConfiguration>(
        PropertiesConfiguration.class).configure(params.properties().setFileName("default_file2.properties"));


CombinedConfiguration config = new CombinedConfiguration(new OverrideCombiner());
config.addConfiguration(config1.getConfiguration());//this overrides config2
config.addConfiguration(config2.getConfiguration());
return config;

这是我在项目中用来创建组合配置的东西。组合配置自然地创建从不同或相同源获取的配置的层次结构。例如,您还可以编写类似:FileBasedConfigurationBuilder<FileBasedConfiguration> config2 = new FileBasedConfigurationBuilder<FileBasedConfiguration>( PropertiesConfiguration.class).configure(params.properties()‌​.setFileName(System.‌​getProperty("default‌​_file2.properties"))‌​);

的内容

FileBasedConfigurationBuilder可以替换为您可能喜欢的任何类型的配置。请参阅链接https://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration2/builder/BasicConfigurationBuilder.html

答案 1 :(得分:1)

您需要CombinedConfiguration。这是示例代码

Parameters params = new Parameters();
CombinedConfigurationBuilder builder = new CombinedConfigurationBuilder()
    .configure(params.fileBased().setFile(new File("configuration.xml")));
CombinedConfiguration cc = builder.getConfiguration();

这里的configuration.xml文件将包含属性文件列表

<configuration systemProperties="systemProperties.xml">
  <!-- Load the system properties -->
  <system/>
  <!-- Now load the config file, using a system property as file name -->
  <properties fileName="myprops1.properties"/>

  <properties fileName="myprops2.propert"/>
</configuration>

组合配置上的documentation非常有帮助