TOMCAT_OPTS, переменная среды и System.getEnv()

Я использую tomcat, и я хочу получить переменную окружения в своем java-коде.

Чтобы установить переменную окружения, я использую эту команду bash:

export TOMCAT_OPTS=-Dmy.var=foo

После этого я запускаю tomcat

./startup.sh (in bin folder of tomcat)

В моем java-коде я пытаюсь получить эту переменную:

System.getEnv("my.var")

Но он возвращает NULL.

Как я могу это сделать?

Я точно знаю, что если я использую maven для запуска tomcat и использования вкладки среды eclipse, переменная найдена! Но мне нужно запустить tomcat, как показано выше, в режиме производства.

EDIT: при использовании экспорта MY_VAR непосредственно он запускается локально, но не на моем сервере...

Ответы

Ответ 1

Наконец, я нашел файл конфигурации с именем tomcat6.conf в CATALINA_HOME. Я добавляю экспорт my.var = foo в конец файла, а System.getenv( "my.var" ) теперь возвращает значение...

Кошмар...

Ответ 2

System.getEnv возвращает переменные среды, такие как PATH или, в вашем примере, TOMCAT_OPTS).

При вызове Java с -Dfoo=bar вы не устанавливаете переменную среды: вы передаете системное свойство. Используйте System.getProperty, чтобы получить значение foo.

Ответ 3

Если вы используете tomcat7 и unbuntu os, вы можете редактировать файл /etc/default/tomcat 7, просто добавьте строку yourvar = yourvalue сделает это.

как показано ниже:

# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of tomcat7.
TOMCAT7_USER=tomcat7

# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of tomcat7.
TOMCAT7_GROUP=tomcat7

IM4JAVA_TOOLPATH=/usr/local/bin/

# The home directory of the Java development kit (JDK). You need at least
# JDK version 1.5. If JAVA_HOME is not set, some common directories for
# OpenJDK, the Sun JDK, and various J2SE 1.5 versions are tried.
#JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk

# You may pass JVM startup parameters to Java here. If unset, the default
# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
# 
# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved
# response time). If you use that option and you run Tomcat on a machine with
# exactly one CPU chip that contains one or two cores, you should also add
# the "-XX:+CMSIncrementalMode" option.
JAVA_OPTS="-Djava.awt.headless=true -Xmx2048m -XX:+UseConcMarkSweepGC"

Ответ 4

Здесь есть файл конфигурации для tomcat, по умолчанию расположенный в /dev/tomcat6/tomcat6.conf, я верю (посмотрите в /etc/init.d/tomcat, чтобы узнать, что такое значение "TOMCAT_CFG". Это "источник" . в этот файл (. $TOMCAT_CFG) перед запуском tomcat (или остановлен, перезапущен и т.д.), поэтому, если вы добавите строку:

MY_VAR=somevalue

Это должно быть доступно вашему java-приложению.

Я знаю, что это старый вопрос, но, возможно, он будет полезен кому-то еще:)

Ответ 5

Для Tomcat7 + Ubuntu:

Set:

  • Откройте /etc/default/tomcat7 файл
  • Добавить строку somekey=value

    Примечание: имя переменной не может содержать точки.

  • Перезапустить Tomcat: service tomcat7 restart

Чтение:

System.getenv("somekey");

Ответ 6

в Tomcat8, установленном при распаковке архива, есть файл под названием catalina.properties "

Вы можете ввести переменные среды в этом файле, просто добавив

my.special.variable=some_value

Ответ 7

Теперь, когда вы объяснили мне, что вы используете установку на основе yum (которые предлагают дистрибутивы Red Hat), если вы используете Tomcat в качестве демона, вам нужно установить "export TOMCAT_OPTS =..." в вас /etc/profile (для глобальной области) или добавьте его в файл ~/.profile или ~/.bashrc у себя дома, который запускает экземпляр Tomcat.

Ответ 8

Используете ли вы Tomcat на Eclipse IDE? Затем вам просто нужно выполнить следующие действия:

  • Двойной щелчок на сервере tomcat
  • Открыть конфигурацию запуска
  • Окружающая среда
  • Новый (имя/значение)

Ответ 9

Если вы хотите установить переменную окружения в tomcat для прохождения через getEnv, используйте setenv.

т.е. в tomcat/bin у вас есть (или должен создать) setenv.sh (или setenv.bat для шиндош) и определить

my.var=FOO
OTHERVAR=BOO

добавив его set для шиндош.