Как обновить веб-приложение Tomcat, не перезапуская весь сервис? - PullRequest
88 голосов
/ 05 июля 2011

Я новичок в Tomcat. У нас есть машина с 5 запущенными приложениями. Несмотря на то, что он dev, он довольно сильно используется нашими клиентами во время тестирования.

Итак, скажем, нам нужно внести одно небольшое изменение в один файл класса. Прямо сейчас нам нужно выключить Tomcat (влияет на остальные четыре приложения), удалить файл WAR (и каталог веб-приложения), заново развернуть новый файл WAR и перезапустить Tomcat.

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

Есть ли лучший способ сделать это? Я имею в виду, есть ли способ перезагрузить только CLASS , который изменился, а не все на компьютере разработчика?

Спасибо.

Ответы [ 3 ]

54 голосов
/ 05 июля 2011

Вы пытались использовать приложение Tomcat's Manager ? Это позволяет вам развертывать / развертывать военные файлы без выключения Tomcat.

Если вы не хотите использовать приложение Manager, вы также можете удалить файл war из каталога webapps, Tomcat отключит приложение через короткий промежуток времени. Затем вы можете скопировать файл войны обратно в каталог, и Tomcat развернет файл войны.

Если вы работаете с Tomcat в Windows, вам может потребоваться настроить свой контекст, чтобы не блокировать различные файлы.

Если у вас просто не может быть простоев, вы можете посмотреть Параллельное развертывание Tomcat 7 Вы можете развернуть несколько версий веб-приложения с одним и тем же контекстным путем одновременно. Правила, используемые для сопоставления запросов с контекстной версией, следующие:

  • Если в запросе нет информации о сеансе, используйте последнюю версию.
  • Если информация о сеансе присутствует в запросе, проверьте менеджер сеанса каждой версии на предмет совпадения сеанса и, если он найден, используйте эту версию.
  • Если в запросе содержится информация о сеансе, но не найдено ни одного подходящего сеанса, используйте последнюю версию.
24 голосов
/ 03 сентября 2015

Есть несколько простых способов.

  1. Просто коснитесь web.xml любого веб-приложения.

    touch /usr/share/tomcat/webapps/<WEBAPP-NAME>/WEB-INF/web.xml
    

Вы также можете обновить определенный файл JAR в WEB-INF / lib, а затем коснуться web.xml, вместо того чтобы создавать весь файл war и развертывать его снова.

  1. Удалите каталог webapps / YOUR_WEB_APP, Tomcat начнет развертывание войны в течение 5 секунд (при условии, что ваш файл войны еще существует в папке веб-приложений).

  2. Обычно перезаписываемый файл войны новой версией автоматически развертывается tomcat. Если нет, вы можете коснуться web.xml, как описано выше.

  3. Скопируйте поверх уже взорванного "каталога" в папку веб-приложений

20 голосов
/ 16 июля 2014

В каталоге conf Apache Tomcat вы можете найти файл context.xml. В этом теге отредактируйте как <<strong> Context reloadable = "true" >. это должно решить проблему, и вам не нужно перезагружать сервер

...