Мне нужно прочитать переменную среды из Приложение Tomcat. Я пытался сделать:
/opt/tomcat/conf/catalina.properties
addint в конце:
my.special.variable=some_value
и прочитав его с помощью
System.getenv("my.special.variable")
, я получаю null
Примечание
У меня есть несколько определенных на уровне ОС (linux ubuntu), но результатом их получения является корневой каталог tomcat - /opt/tomcat.[12168estiveFor пример:
с printenv
Я вижу переменную HOME (также с echo $ HOME). Выполнение кода из программы, которая находится за пределами tomcat - результат правильный - /home/user.
Точно такой же код в приложении, развернутом в возвращении tomcat - /opt/tomcat.
Вы можете определить переменные в setenv.sh
(Linux/UNIX) или setenv.bat
(Windows). Определите переменные таким образом, чтобы они соответствовали выполняемому О/С. Для Linux/UNIX необходимо экспортировать переменные. Вы также можете определить их в среде, в которой запускаете Tomcat.
Вы также можете создать appenv.sh
или appenv.bat
файл для изменений приложения (локальных). Для получения более подробной информации прочтите существующий файл setenv.sh
или setenv.bat
.
Периоды и дефисы недействительны для переменных окружения. Традиционно имена трансформируются с помощью верхней оболочки имени и смены периодов и дефисов на подчеркивания. Это дает имя MY_SPECIAL_VARIABLE
. Это будет определено строкой типа:
export MY_SPECIAL_VARIABLE=some.value
Вы также можете определить свойства Java-системы, добавив строку '-Dmy.special.variable=some_valueв командную строку, используемую для запуска Tomcat. Это делается в том же файле. В
setenv.sh` Вы можете добавить строку типа:
export JAVA_OPTS="$JAVA_OPTS -Dmy.special.variable=some_value"
Вы также можете использовать этот файл для настройки конфигурации Java. Если системная переменная JAVA_OPTS
определена в среде, используемой для запуска Tomcat, то ее значение будет добавлено в командную строку.
Если вы используете свойство Java-системы, то вы получите его с помощью вызова System.getProperty
. Это будет закодировано следующим образом:
System.getProperty("my.special.variable");
Переменные окружения не являются свойствами Tomcat.
AFAIK вы не можете использовать свойства внутри реального кода, только, например, в server.xml.
Если вы хотите использовать переменные окружения, которые вы можете получить с помощью System.getenv, вам нужно определить их с вашей операционной системой; это зависит от того, что вы делаете. Классический пример Linux можно найти в /etc/default/tomcat
или в службе systemd.