межсерверная переменная среды - PullRequest
2 голосов
/ 05 февраля 2011

Я хотел бы установить возможность установки строковых переменных, таких как "DEVEL" или "PRODUCTION", на серверах Glassfishv3 и Apache tomcat 6, и хочу, чтобы они были доступны из кода Java, чтобы я мог изменить поведение моего приложения в соответствии с переменной. Какой самый простой способ сделать это?

Ответы [ 4 ]

4 голосов
/ 06 февраля 2011

Я не думаю, что есть метод установки переменной среды, который работает для обоих этих серверов.Существуют методы для установки переменной среды для каждого из этих серверов.

Чтобы установить системное свойство, которое может быть обнаружено вашим веб-приложением во время выполнения:

Tomcat : установите значение переменной среды CATALINA_OPTS и запустите сервер.

export CATALINA_OPTS=-DmyPropertyName=myPropertyValue

GlassFish 3 : есть несколько способов, которые вы можете использовать.

  1. Прямое использование системного свойства GlassFish.Запустите сервер.Используйте команду asadmin 'create-system-properties', чтобы определить системное свойство.Перезапустите сервер.

    asadmin create-system-property myPropertyName = myPropertyValue.

  2. Прямое использование JVM Параметр: Запустите сервер.Используйте команду asadmin 'create-jvm-option', чтобы создать новый параметр JVM, который определяет свойство System, которое будет использоваться при запуске сервера.Перезапустите сервер, чтобы он использовал свойство.

    asadmin create-jvm-options -DmyPropertyName = myPropertyValue

Чтобы изменить значение системного свойства, которое можно обнаружитьвашим веб-приложением во время выполнения:

Tomcat : измените значение переменной среды CATALINA_OPTS и перезапустите сервер.

export CATALINA_OPTS=-DmyPropertyName=myNEWPropertyValue

GlassFish 3: метод изменения значения свойства зависит от метода, который вы использовали для установки значения свойства.

  1. Прямое использование системного свойства GlassFish.Создайте системное свойство GlassFish с помощью команды «create-system-properties» и перезапустите сервер.

    asadmin create-system-property myPropertyName = myNEWPropertyValue

  2. Прямое использованиеопция JVM: удалите старую опцию jvm и создайте новую вместо нее.Перезапустите сервер.

    asadmin delete-jvm-options -DmyPropertyName = myPropertyValue

    asadmin create-jvm-options -DmyPropertyName = myNEWPropertyValue

    См. http://java.net/jira/browse/GLASSFISH-11253

Чтобы сбросить значение системного свойства, которое может быть обнаружено вашим веб-приложением во время выполнения:

Tomcat : сброс значения переменной среды CATALINA_OPTS безвключая определение опции JVM.Перезагрузите сервер.

export CATALINA_OPTS=

GlassFish 3 :

  1. Использование системного свойства GlassFish.Используйте команду «delete-system-properties» и перезапустите сервер.

    asadmin delete-system-property myPropertyName

  2. Использование параметра JVM для определения свойства.Используйте команду delete-jvm-options и перезапустите сервер.

    asadmin delete-jvm-options -DmyPropertyName = myPropertyValue

Для доступа к системному свойству из вашего веб-приложения

Использовать Система.getProperty (String) или [System.getProperty (String, String)] [2]

Сказав все это, я хочу отговорить вас от использования этой информации для реализации вашей заявленной стратегии развития.

Существуют и другие методы разграничения среды разработки и производства, которые не связаны с изменениями кода.

[2]: http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperty(java.lang.String, java.lang.String)

3 голосов
/ 05 февраля 2011

Для tomcat вы можете использовать переменную окружения CATALINA_OPTS для установки системных свойств:

CATALINA_OPTS   (Optional) Java runtime options used when the "start",
                or "run" command is executed.

Таким образом, вы можете настроить это в IDE или просто в командной строке:

CATALINA_OPTS=-DdevelopmentMode=true 

А потом в вашем приложении:

System.getProperty("developmentMode")
0 голосов
/ 05 февраля 2011

Зависит от того, должна ли она быть постоянной или динамической. Хотите ли вы изменить его во время компиляции или во время выполнения на лету. При первом подходе вы можете сделать это в web.xml, установив параметр init или env-entry, или даже использовать простой файл свойств, упакованный в архиве jar. При втором подходе вы можете использовать специальный вид таблицы конфигурации в вашей базе данных, которая будет пиропдически объединяться приложением, или, возможно, вы можете использовать механизм управления JMX и изменять конфигурацию на лету, используя jconsole

0 голосов
/ 05 февраля 2011

Используйте env-запись в web.xml:

<env-entry>
  <description>development or production</description>
  <env-entry-name>devMode</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>PRODUCTION</env-entry-value>
</env-entry>

А в коде Java вы можете сделать:

Context ctx = new InitialContext();
String devMode = (String) ctx.lookup("java:/comp/env/devMode");
...