1

我可以working-dir="file:${user.home}/some-directory"在我的 .properties 文件中执行类似的操作吗?我正在使用 ResourceBundle 从 .properties 文件加载配置,并且我将继承系统属性键,例如user.home我的working-dir属性。能够做到这一点会很好,因为我可以分别在源包和测试包的资源目录中拥有不同版本的 .properties。我想working-dir为我的生产和测试环境定义不同的值。

4

2 回答 2

1

您不能直接这样做,但是您可以在代码中解析属性并以编程方式扩展变量,例如

  • ${varname}在您的财产中搜索模式
  • varname从系统属性中获取值
  • 替换${varname}为系统属性的值varname

这是上面的一个简单实现:

String property = "file:${user.home}/some-directory";

StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("\\$\\{(.+)\\}");
Matcher matcher = pattern.matcher(property);
while (matcher.find())
{
    String key = matcher.group(1);
    String val = System.getProperty(key);
    if (val != null)
    {
        matcher.appendReplacement(sb, Matcher.quoteReplacement(val));
    }
}
matcher.appendTail(sb);
System.out.println(sb.toString());
于 2010-10-20T08:25:56.530 回答
0

刚刚尝试了Apache commons configuration变量插值,它工作得很好。

于 2010-10-20T10:43:45.240 回答