it-roy-ru.com

Как обновить веб-приложение Tomcat, не перезапуская весь сервис?

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

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

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

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

Благодарю.

88
cbmeeks

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

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

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

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

  • Если в запросе нет информации о сеансе, используйте последнюю версию.
  • Если информация о сеансе присутствует в запросе, проверьте менеджер сеанса каждой версии на предмет соответствия сеанса и, если он найден, используйте эту версию.
  • Если информация о сеансе присутствует в запросе, но не найдено соответствующего сеанса, используйте последнюю версию.
54
Steve K

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

  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 начнет развертывание war в течение 5 секунд (при условии, что ваш файл war еще существует в папке webapps).

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

  3. Копировать поверх уже разорванной "директории" в папке ваших веб-приложений

24
Chirag Katudia

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

20
skal