Что касается переменной файла и среды application.properties
В моем файле application.properties, если у меня есть путь, настроенный, как показано ниже, Java успешно распознает путь.
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?
Ответы
Ответ 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();
}
Ответ 3
Это правильно. 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");
Надеюсь, это поможет многим людям, поэтому им не придется выбирать кусочки и вещи из разных стран, что очень долго решает проблему.
Ответ 4
Посмотрите Конфигурация Commons
Или, альтернативно, используйте относительные пути в вашем файле свойств и загрузите базовый каталог через командную строку в качестве системного свойства. Таким образом, файлы свойств остаются независимыми от того, где приложение фактически развернуто.