首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于application.properties文件和环境变量

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

Stack Overflow用户
提问于 2010-02-15 11:29:35
回答 6查看 110.4K关注 0票数 44

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

代码语言:javascript
复制
pathToInputFile=/kcs/data/incoming/ready/
pathToInputFileProcess=/kcs/data/incoming/work/

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

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

代码语言:javascript
复制
pathToInputFile=${TOM_DATA}/data/incoming/ready/
pathToInputFileProcess=${TOM_DATA}/data/incoming/work/

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-15 11:37:59

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

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

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

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

希望这能帮上忙。

票数 34
EN

Stack Overflow用户

发布于 2012-03-16 01:52:58

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

下面是一些使用正则表达式的代码,这些正则表达式是我用来处理环境变量替换的:

代码语言:javascript
复制
/*
 * 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();
}
票数 18
EN

Stack Overflow用户

发布于 2013-08-13 14:23:56

这就对了。Java不处理替换环境变量的值。另外,Java可能无法识别像、$EXT_DIR、这样的变量。在使用这些变量时,您可能会遇到FileNotFoundException.但是Java将识别用-D在catalina.sh中定义的变量。我的意思是,假设您在catalina.sh中有这样一个定义

代码语言:javascript
复制
CATALINA_OPTS="-Dweb.external.dir="$EXT_DIR"

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

代码语言:javascript
复制
String webExtDir = System.getProperty("web.external.dir");

希望这对很多人有帮助,这样他们就不需要从各处挑选零碎的东西,这需要很长时间才能解决手头的问题。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2263929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档