Стратегии для настройки Java WebApp - PullRequest
4 голосов
/ 12 августа 2010

Часть моего веб-приложения включает загрузку файлов изображений. На рабочем сервере файлы должны быть записаны в / somepath_on_production_server / images. Для локальной разработки я хочу записать файлы в /some_different_path/images.

Какой лучший способ справиться с этими различиями в конфигурации?

Одним из важных требований является следующее: я вообще не хочу связываться с рабочим сервером, я просто хочу иметь возможность развернуть файл войны и заставить его работать. Поэтому я не хочу использовать какую-либо технику, которая потребует от меня возиться с переменными окружения / classpath / etc. на производстве машины. Я в порядке с тем, чтобы установить их на моем локальном компьютере.

Я представляю себе два возможных общих подхода:

  1. загрузка специального файла конфигурации "dev" во время выполнения, если соблюдены определенные условия (переменная среды / classpath / etc)
  2. переключение переключателя во время процесса сборки (возможно, профили maven?)

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

Простые вещи, такие как String, могут быть объявлены как записи среды в web.xml и получены через JNDI.Ниже приведен пример с env-entry с именем «imagePath».

<env-entry> 
    <env-entry-name>imagePath</env-entry-name> 
    <env-entry-value>/somepath_on_production_server/images</env-entry-value> 
    <env-entry-type>java.lang.String</env-entry-type> 
</env-entry>

Чтобы получить доступ к свойствам из вашего кода Java, выполните поиск JNDI:

// Get a handle to the JNDI environment naming context
Context env = (Context)new InitialContext().lookup("java:comp/env");

// Get a single value
String imagePath = (String)env.lookup("imagePath");

Обычно это делается по старинке ServiceLocator, где вы должны кэшировать значение длязаданный ключ.

Другой вариант - использовать файлы свойств.


И обычный способ работы с несколькими средами обычно включает профили и фильтрацию (либо файла свойств, либодаже web.xml).

Ресурсы

1 голос
/ 12 августа 2010

Использование файла свойств не так уж сложно и немного более читабельно. Web.xml

InputStream ldapConfig = getClass().getResourceAsStream(
          "/ldap-jndi.properties");
      Properties env = new Properties();
      try {
        env.load(ldapConfig);
      } finally {
        if (ldapConfig != null) {
          ldapConfig.close();
        }
      }
1 голос
/ 12 августа 2010

Имеют значения по умолчанию в вашем файле WAR, соответствующие производственным настройкам, но позволяют им быть переопределены внешне, например, через системные свойства или JNDI.

String uploadLocation = System.getProperty("upload.location", "c:/dev");

(не проверено)

...