次のようにパスを設定すると、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はそれらを環境変数として自動的に認識しないため、それらを解決しません。
これを行うには、you値を解析し、見つかった環境変数を解決する必要があります。
環境変数は、Java)からさまざまなメソッドを使用して取得できます。例:Map<String, String> env = System.getenv();
ここに基本的なチュートリアルがあります: http://Java.Sun.com/docs/books/tutorial/essential/environment/env.html
それが助けになることを願っています。
トム・ダッカリングの答えは正しいです。 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();
}
そうです。 Javaは、環境変数の値の置換を処理しません。また、Javaは$ EXT_DIRなどの変数を認識しない場合があります。このような変数を使用しているときに、FileNotFoundExceptionが発生する可能性があります。ただし、Javaは、-Dでcatalina.sh。これが意味することは、catalina.shにそのような定義があるとします
CATALINA_OPTS="-Dweb.external.dir="$EXT_DIR"
プロパティファイルで$ {web.external.dir}を使用する代わりに* $ EXT_DIR *。そして、コードでこのプロパティにアクセスしているときに、次のようにできます。
String webExtDir = System.getProperty("web.external.dir");
これが多くの人々の助けになることを願っています。そうすれば、手元の問題を解決するのに本当に時間がかかる、あらゆる場所から断片を選ぶ必要がなくなるでしょう。
Commons configuration をご覧ください
または、プロパティファイルで相対パスを使用し、コマンドライン経由でシステムプロパティとしてベースディレクトリをロードします。このようにして、プロパティファイルは、アプリケーションが実際にデプロイされている場所に依存しません。
Apache Commonsプロジェクトでは、 環境変数を使用 を使用できるプロパティファイルの処理が拡張されています(「変数の解釈」セクションを参照)。その後、使用して欲しいものを取得できるはずです:
pathToInputFile=${env:TOM_DATA}/data/incoming/ready/