Среды Tomcat Production / Dev - PullRequest
       2

Среды Tomcat Production / Dev

10 голосов
/ 05 декабря 2011

При разработке PHP можно определить, работает ли приложение в рабочей среде или среде разработки, из переменной среды сервера.

Имеется ли аналогичная переменная на серверах tomcat или есть лучший способ нацеливания приложений на производство и разработку?

Ответы [ 3 ]

7 голосов
/ 14 февраля 2012

Каждый экземпляр Tomcat, который у нас есть, имеет флаг isProduction, определенный в разделе GlobalNamingResources файла server.xml.

server.xml:

<Server ...>
  ...
  <GlobalNamingResources>
    <Environment name="isProduction" value="false" type="java.lang.Boolean" override="false" /> 
  </GlobalNamingResources>

  <Service name="Catalina">
  ... etc ...
  </Service>
</Server>

Это позволяетсвойство, которое будет доступно во всем приложении путем создания свойства в context.xml, которое ссылается на ресурс:

context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context ...>
  <ResourceLink name="isProduction" global="isProduction" type="java.lang.Boolean" />
  ...
</Context>

Чтобы получить значение:

public boolean isProduction() {
   Object o;
   try {
      o = (new InitialContext()).lookup("java:comp/env/isProduction");
   }  catch (NamingException e) {
      o = Boolean.FALSE; // assumes FALSE if the value isn't declared
   }
   return o == null ? Boolean.FALSE : (Boolean) o;
}
2 голосов
/ 05 декабря 2011

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

  1. Используйте все, что предоставляет ваш инструмент для сборки. Например: использовать профили Maven. http://maven.apache.org/guides/introduction/introduction-to-profiles.html
  2. Используйте файл свойств для приложения со свойством mode.
  3. Передайте свойство -Dmyproject.mode = XXXX в JVM
  4. Использовать системное свойство ОС

Я призываю вас использовать что-то вроде # 1. Наверняка вы используете какой-то инструмент для создания своего приложения (Ant, SBT и т. Д.).

Представьте себе, если по ошибке кто-нибудь переустановит Tomcat, удалит свойства ОС или подобное. Ваше приложение может работать в режиме Prod.

0 голосов
/ 05 декабря 2011

Вы можете установить переменные среды ОС в скриптах запуска tomcat (например, run.sh в среде linux) и прочитать их из вашей программы. Также вы можете настроить переменные среды Java (например: Передача переменных среды в JVM независимо от платформы ). Я лично использую разные файлы свойств для dev / prod / etc и читаю эту переменную для файла свойств. Развернут только необходимый файл свойств.

...