Изменение значений свойств при повторном развертывании новой версии .war в tomcat

В моем веб-приложении Java, где я использую tomcat в качестве сервера приложений, меня интересует способ передачи другого значения определенному свойству в приложение при его развертывании/повторном развертывании.
Есть несколько известных мне способов. из:

  1. Один из них — через параметры JVM, переданные в набор tomcat в файле setenv.sh. Насколько я знаю, требуется перезапуск сервера для каждого повторного развертывания.
  2. Чтобы указать значения свойств в файле свойств. Требуются значения, установленные вручную в файле, и перестроение приложения перед каждым повторным развертыванием одной и той же версии приложения.
  3. При использовании Spring указание значения свойства в некотором bean-компоненте, определенном в файле applicationContext.xml. Опять же требует ручного подхода и пересборки приложения.
  4. Хранение конфигурации в базе данных. Это требует, чтобы мы знали свойства подключения к базе данных, хранящей такие конфигурации.

Теперь, если я планирую изменять определенную переменную свойства, такую ​​как IP-адрес, количество подключений, номер порта или какую-либо другую подобную переменную каждый раз при развертывании/повторном развертывании приложения, какой стратегии мне следует придерживаться? Существует ли общепринятый способ передачи таких значений свойств в веб-приложение, развернутое в Tomcat? Нужно ли перезапускать сервер tomcat, если я передаю значение свойства в качестве параметров JVM?

Или есть какой-то другой общий способ настройки параметров развертывания, который я не упомянул выше? Я бы предпочел, чтобы процесс, который можно легко автоматизировать, выполнялся программно (например, передача параметров JVM), вместо того, чтобы задавать свойства вручную перед каждым развертыванием (например, настройка файла свойств). Также не должно требоваться перестроение одной и той же версии каждый раз перед повторным развертыванием.


person Atharva    schedule 24.10.2012    source источник
comment
Вы используете базу данных? - можно было поместить их в таблицу конфигурационных данных и прочитать их при запуске   -  person blank    schedule 24.10.2012
comment
Да, я использую базу данных. Кажется хорошим вариантом.   -  person Atharva    schedule 24.10.2012
comment
Изменяются ли эти свойства от сервера к серверу или каждый раз, когда вы повторно развертываете приложение на том же сервере?   -  person Pushkar    schedule 24.10.2012
comment
Да, они могут меняться от сервера к серверу. Говоря, что кажется хорошим вариантом передать их как параметры JVM. Тогда будет целесообразно перезапустить сам сервер tomcat, когда он работает в каком-то кластерном режиме. Не повредит ли кластер или сеанс перезапуск одного такого узла tomcat внутри кластера для новых конфигураций?   -  person Atharva    schedule 24.10.2012
comment
Вероятно, этот другой вопрос помогает: stackoverflow.com/q/12450297/870122   -  person perissf    schedule 24.10.2012
comment
Если они меняются с сервера на сервер, у вас должен быть файл свойств уровня сервера, например. на '//properties/mywebapp.properties' . Вы можете получить доступ к этому из своего веб-приложения, чтобы выбрать правильные настройки для сервера.   -  person Pushkar    schedule 24.10.2012


Ответы (1)


Я думаю, что JNDI был изобретен именно для той цели, о которой вы просите:

  • вам не нужно изменять параметры JVM
  • вам не нужно перезапускать Tomcat каждый раз, когда вы меняете эти параметры
  • вам не нужно перестраивать приложение
  • вы можете изменить эти значения извне/программно. Я считаю, что Tomcat позволяет это, или даже если нет - не должно быть сложно написать что-то вроде устанавливаемого MBean, который будет устанавливать соответствующие свойства через JMX.
person mindas    schedule 24.10.2012
comment
спасибо за указание на JMX и MBeans, которые отлично послужат этой цели. - person Atharva; 25.10.2012