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

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

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

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

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

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

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

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

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

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

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

希望有一些帮助。

Tom Duckering的回答是正确的。 Java不会为您处理此问题。

这里有一些代码利用我编写的正则表达式来处理环境变量替换:

 /* * Returns input string with environment variable references expanded, eg $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(); } 

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

 CATALINA_OPTS="-Dweb.external.dir="$EXT_DIR" 

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

 String webExtDir = System.getProperty("web.external.dir"); 

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

看看Commons配置

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

Apache Commons项目扩展了属性文件的处理,允许您使用环境变量 (请参阅变量解释部分)。 然后你应该能够得到你想要的东西:

 pathToInputFile=${env:TOM_DATA}/data/incoming/ready/