apache PropertiesConfiguration无法解析占位符

时间:2019-08-29 13:22:51

标签: java apache-config

说我有以下两个配置文件:

文件1:

key1 = ${common.key1}
key2 = ${common.key2}

文件2:

common.key1 = value1
common.key2 = value2

我有以下代码:

import org.apache.commons.configuration.PropertiesConfiguration;
...
PropertiesConfiguration newConfig = new PropertiesConfiguration();
File configFile1 = new File("...paht to file 1");
File configFile2 = new File("...path to file 2");
newConfig.setDelimiterParsingDisabled(true);
newConfig.load(configFile2);
newConfig.load(configFile1);

Iterator<String> props = newConfig.getKeys();
while (props.hasNext()) {
    String propName = props.next();
    String propValue = newConfig.getProperty(propName).toString();
    System.out.println(propName + " = " + propValue);
}

我有以下输出:

common.key1 = value1
common.key2 = value2
key1 = ${common.key1}
key2 = ${common.key2}

为什么不解析占位符?

1 个答案:

答案 0 :(得分:0)

请参阅说明文件中的this page

  

以下是与变量插值有关的更多信息,用户应注意:

     
      
  • ...

  •   
  • 所有属性访问方法均完成变量插值。 一个例外是通用的getProperty()方法,该方法返回原始属性值。

  •   

这就是您在代码中使用的内容。

API docs of getProperty()也提到了这一点:

  

从配置中获取属性。 ... 在此级别上,尚未执行变量替换。

使用PropertiesConfiguration中可用的其他方法来获取实际的内插值。例如,在getProperties()上调用PropertiesConfiguration,将其转换为java.util.Properties对象,然后对其进行迭代。