我一直在寻找apache commons属性配置的属性,它可以覆盖属性文件中存在的重复键,而不是附加属性并像列表那样处理,但找不到任何此类属性。是否有相同的解决方法?
答案 0 :(得分:0)
默认情况下,Apache commons属性配置将仅加载在属性文件中找到的第一个键值对。据我所知,它不提供您正在寻找的任何属性。由于PropertiesConfigurations调用resolveContainerStore,因此可以看到此行为(关键)方法。默认实现类似于
protected Object resolveContainerStore(String key)
{
Object value = getProperty(key);
if (value != null)
{
if (value instanceof Collection)
{
Collection collection = (Collection) value;
value = collection.isEmpty() ? null : collection.iterator().next();
}
else if (value.getClass().isArray() && Array.getLength(value) > 0)
{
value = Array.get(value, 0);
}
}
return value;
}
在此实现中,它从值列表返回给定键的第一个值,即value = Array.get(value,0);
如果希望覆盖属性以便返回最后加载的属性,则可以覆盖默认实现。这是我对上述功能的实现。
@Override
protected Object resolveContainerStore(String key) {
Object value = getProperty(key);
if (value != null) {
if (value instanceof Collection) {
Collection collection = (Collection) value;
Iterator iterator = collection.iterator();
value = null;
while (iterator.hasNext()) {
value = iterator.next();
}
} else if (value.getClass().isArray() && Array.getLength(value) > 0) {
value = Array.get(value, Array.getLength(value) - 1);
}
}
return value;
}