合并配置文件
Combining configuration files
我正在开发一个 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));
有什么想法吗?
你需要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 将非常有用
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 可以替换为您可能喜欢的任何类型的配置。参考linkhttps://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration2/builder/BasicConfigurationBuilder.html
我正在开发一个 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));
有什么想法吗?
你需要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 将非常有用
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 可以替换为您可能喜欢的任何类型的配置。参考linkhttps://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration2/builder/BasicConfigurationBuilder.html