关于应用程序.属性文件和环境变量

Java成功识别了我的appplication.properties文件中的路径,当我的路径配置如下:

pathToInputFile=/kcs/data/incoming/ready/
pathToInputFileProcess=/kcs/data/incoming/work/

如果我尝试使用环境变量,Java程序将无法识别路径。

(环境变量设置为 /kcs。TOM_DATA

pathToInputFile=${TOM_DATA}/data/incoming/ready/
pathToInputFileProcess=${TOM_DATA}/data/incoming/work/

是否可以在 application.properties 文件中使用环境变量?


答案 1

您可以将环境变量放在属性文件中,但 Java 不会自动将它们识别为环境变量,因此不会解析它们。

为此,您必须解析值并解析找到的任何环境变量。

您可以使用各种方法从Java获取环境变量。例如:Map<String, String> env = System.getenv();

这里有一个基本的教程:http://java.sun.com/docs/books/tutorial/essential/environment/env.html

希望这有一些帮助。


答案 2

汤姆·达克林的回答是正确的。Java不会为您处理这个问题。

以下是一些利用我编写的用于处理环境变量替换的正则表达式的代码:

/*
 * Returns input string with environment variable references expanded, e.g. $SOME_VAR or ${SOME_VAR}
 */
private String resolveEnvVars(String input)
{
    if (null == input)
    {
        return null;
    }
    // match ${ENV_VAR_NAME} or $ENV_VAR_NAME
    Pattern p = Pattern.compile("\\$\\{(\\w+)\\}|\\$(\\w+)");
    Matcher m = p.matcher(input); // get a matcher object
    StringBuffer sb = new StringBuffer();
    while(m.find()){
        String envVarName = null == m.group(1) ? m.group(2) : m.group(1);
        String envVarValue = System.getenv(envVarName);
        m.appendReplacement(sb, null == envVarValue ? "" : envVarValue);
    }
    m.appendTail(sb);
    return sb.toString();
}

推荐