Подтвердить что ты не робот

Что касается переменной файла и среды 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?

4b9b3361

Ответ 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

Или, альтернативно, используйте относительные пути в вашем файле свойств и загрузите базовый каталог через командную строку в качестве системного свойства. Таким образом, файлы свойств остаются независимыми от того, где приложение фактически развернуто.