Apache Commons:CompositeConfiguration中的列表处理

时间:2016-02-17 00:24:31

标签: apache-commons apache-commons-config

我有两个配置文件:

override.xml looks like this ...
<paths>
 <path>1</path>
 <path>2</path>
 <path>3</path>
</paths> 
<numbers>
 <number>100</number>
 <number>200</number>
</numbers>

default.xml looks like this ...
<paths>
 <path>4</path>
 <path>5</path>
 <path>6</path>
</paths>
<alphabets>
 <alphabet>A</alphabet>
 <alphabet>B</alphabet>
</alphabets>

我正在使用CompositeConfiguration。首先添加override.xml然后再添加default.xml。

When I do a getList("paths.path") on the CompositeConfiguration, I get back 1,2,3,4,5,6. 

这告诉我从override.xml和default.xml中获取值。 有没有办法只从override.xml中获取值,因为它会覆盖default.xml值?

同时如果我要做一个getList(&#34; numbers.number&#34;),我预计会返回100,200。 getList(&#34; alphabets.alphabet&#34;)返回A,B。

1 个答案:

答案 0 :(得分:1)

组合列表的内容是CompositeConfiguration的getList的默认行为。您需要使用的是具有适当NodeCombiner的CombinedConfiguration。对于您的用例,OverrideCombiner是合适的。 示例代码:

XMLConfiguration x1 = new XMLConfiguration();
....
XMLConfiguration x2 = new XMLConfiguration();
....
CombinedConfiguration config = new CombinedConfiguration(new OverrideCombiner());
config.addConfiguration(x1);
config.addConfiguration(x2);

执行config.getList(“numbers.number”)

时会返回配置x1中定义的列表