关于application.properties文件和环境变量

Ara*_*rav 30 java configuration environment-variables

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

pathToInputFile=/kcs/data/incoming/ready/
pathToInputFileProcess=/kcs/data/incoming/work/
Run Code Online (Sandbox Code Playgroud)

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

(环境变量TOM_DATA设置为/ kcs.)

pathToInputFile=${TOM_DATA}/data/incoming/ready/
pathToInputFileProcess=${TOM_DATA}/data/incoming/work/
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*ing 20

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

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

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

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

希望有一些帮助.


Tim*_*wis 15

Tom Duckering的回答是正确的.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();
}
Run Code Online (Sandbox Code Playgroud)

  • 那么,如何将其连接到“application.properties”? (3认同)

小智 13

那是对的.Java不会处理替换环境变量的值.Java也可能无法识别$ EXT_DIR等变量.使用此类变量时,您可能会遇到FileNotFoundException.但Java会认识到,与定义的变量-Dcatalina.sh.我的意思是,假设你在catalina.sh中有这样的定义

CATALINA_OPTS="-Dweb.external.dir="$EXT_DIR"
Run Code Online (Sandbox Code Playgroud)

在属性文件中使用$ {web.external.dir}而不是使用*$ EXT_DIR*.在您的代码中访问此属性时,您可以这样做:

String webExtDir = System.getProperty("web.external.dir");
Run Code Online (Sandbox Code Playgroud)

希望这会对很多人有所帮助,所以他们不必从世界各地挑选零碎碎片,这需要很长时间来解决手头的问题.


obj*_*cts 7

看看Commons配置

或者在属性文件中使用相对路径,并通过命令行将基本目录作为系统属性加载.这样,属性文件仍然与应用程序实际部署的位置无关.


kc2*_*001 7

Apache Commons项目扩展了对属性文件的处理,使您可以使用环境变量(请参见“变量解释”部分)。然后,您应该可以使用以下方法获得想要的东西:

pathToInputFile=${env:TOM_DATA}/data/incoming/ready/
Run Code Online (Sandbox Code Playgroud)