Мне нужно прочитать переменную среды из приложения Tomcat. Я пробовал делать:
/opt/tomcat/conf/catalina.properties
addint в конце:
my.special.variable=some_value
и читая это
System.getenv("my.special.variable")
Я получаю ноль
Заметка
У меня есть несколько, определенных на уровне ОС (linux ubuntu), но результатом их получения является корень tomcat - / opt / tomcat.
Например :
с участием 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_valueto the command line used to start Tomcat. This is done in the same file. In
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.