2015-09-10 3 views
1

Можно ли изменить переменные окружения Tomcat и получить их одним перезагруженным webapp без перезагрузки всего сервера?Будет ли одна перезагрузка Webapp поднять модифицированный Tomcat setenv.sh?

Допустим, мы имеем WebAPP А и В, и setenv.sh:

#!/bin/bash 

BASE_DIR=/var/srv 
JAVA_HOME=/opt/java/jdk1.8.0_45 
TOMCAT_DIR=/opt/apache-tomcat-8.0.18 
TOMCAT_PORT=8080 
SOME_PROPERTY=SOMETHING 

Если мы изменим SOME_PROPERTY и перезагружать только А, он будет ловить новые значения, или мы должны перезапустить Tomcat?

+0

Выполняется ли сценарий 'setenv.sh'? – dotvav

+0

Да, почему? – frhd

+0

Выполняется ли при перезагрузке webapp или только при запуске tomcat (re)? – dotvav

ответ

4

setenv.sh - это не только файл конфигурации, который читается. Это сценарий, который запускается до запуска JVM tomcat, для настройки среды для процесса JVM tomcat (процесс для базовой ОС). Как только этот процесс запущен, он запускается в контексте с этими переменными среды.

Java может получить доступ и мутировать системные свойства (-D параметры в командной строке виртуальной машины Java, не следует путать с ENV переменных) через System.getProperty и System.setProperty, но он не сможет, самостоятельно, разобрать и интерпретировать оболочки скрипты, которые использовались для запуска JVM-процесса на ОС хоста.

Мое предложение состоит в том, чтобы создать файл конфигурации, передать путь к этому файлу конфигурации в env variable/system property и перезагрузить этот файл при запуске приложения.

+0

Вы думаете, что можно передавать переменные env на основе per-webapp? – frhd

+0

Да, если приложения ищут разные имена переменных, это определенно возможно: 'APP1_CONFIG = X'' APP2_CONFIG = Y' – dotvav

+0

@frhd Переменные среды доступны для всего процесса, а не для одного веб-приложения, работающего на JVM , Как говорит * dotvav *, вы можете использовать переменную окружения, которую распознает только целевое веб-приложение, но это отвратительно. Использование переменных среды в Java не рекомендуется в пользу использования системных свойств, которые изменяются во время выполнения (как упоминалось в этом ответе). –

1

В документации сценарий setenv.sh указан как запуск при запуске сценария. Таким образом, вам понадобится перезапустить Tomcat, чтобы изменения укрепились.