изменить конфигурацию / настройки без перезапуска Tomcat - PullRequest
6 голосов
/ 06 ноября 2019

В идеале я хочу иметь возможность загрузить в новой копии config , если обнаруживается изменение, так что если оно обновляется в БД, оно получаетизвлекается и обновляется в приложении без перезапуска .

Я пытался добавить autodeploy = true внутри хоста, server.xml и reloadable = true внутри context.xml. Но ничего из этого не сработало.

Есть ли какое-то другое решение для этого. Я использую Eclipse IDE, и мой сервер - Tomcat.

Я читаю, что добавление изнутри контекста поможет в этом.

<Context reloadable="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>Config/Design/configs/globalconfig</WatchedResource>

Но это все еще не помогает мне. Я даю путьнеправильно или что-то? Я получил это по следующей ссылке https://www.mulesoft.com/tcat/tomcat-reload

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

Ответы [ 4 ]

4 голосов
/ 11 ноября 2019

Если перейти к заголовку вопроса

изменить конфигурацию / настройки без перезапуска Tomcat

Я бы согласился с Джомси Джонни, что подход к дизайну возможнонужно пересмотреть. В продолжение вышеприведенного комментария, возможно, вам следует подумать о том, чтобы сохранить конфигурацию вне контейнера. Есть много способов достижения того же самого, одно возможное направление - с помощью Apache Zookeeper .

В примечании, путь, упомянутый в документе Mule, обычно имеет форму 'WEB-INF /x / yz 'или' /Dir0/config.file'.

1 голос
/ 15 ноября 2019

Возможно развертывание веб-приложений на работающем сервере Tomcat.

Если атрибут хоста autoDeploy имеет значение «true», хост будет пытаться динамически развертывать и обновлять веб-приложения по мере необходимости, например, еслиновый .WAR сбрасывается в базу приложений. Чтобы это работало, на хосте должна быть включена фоновая обработка, которая является конфигурацией по умолчанию.

autoDeploy установлен на "true", а работающий Tomcat допускает:

  • Развертывание. Файлы WAR, скопированные в Host appBase.
  • Развертывание разнесенных веб-приложений, скопированных в Host appBase.
  • Повторное развертывание веб-приложения, которое уже было развернуто из .WAR, когдановый .WAR предоставляется. В этом случае разорванное веб-приложение удаляется, а .WAR снова расширяется. Обратите внимание, что взрыв не произойдет, если узел настроен так, что .WAR не будут разнесены с атрибутом unpackWARs, установленным в значение «false», и в этом случае веб-приложение будет просто повторно развернуто как сжатый архив.
  • Повторное развертывание веб-приложения, если обновлен файл /WEB-INF/web.xml (или любой другой ресурс, определенный как WatchedResource). Повторное развертывание веб-приложения, если обновлен файл дескриптора контекста, из которого было развернуто веб-приложение.
  • Повторное развертывание веб-приложения, если файл дескриптора контекста (с именем файла, соответствующим пути контекста)ранее развернутого веб-приложения) добавляется в каталог $ CATALINA_HOME / conf / [enginename] / [hostname] /.
  • Отключение веб-приложения, если его база документов (docBase) удалена. Обратите внимание, что в Windows предполагается, что включены функции антиблокировки (см. Конфигурация контекста), в противном случае невозможно удалить ресурсы работающего веб-приложения

Выше приведен фрагмент из Apache tomcat А также большая часть общей идеи о горячем развертывании, которую я получил от hot deploy

0 голосов
/ 11 ноября 2019

Вы можете написать сценарий и запустить его как службу за пределами вашего приложения, чтобы отслеживать время последнего изменения вашего конфигурационного файла, в случае изменения вы переключаетесь на контейнер Tomcat и запускаете следующую команду (учитывая, что ОС - это Linux):

source ~/.bashrc

(В случае окон это делается, как только вы меняете переменные среды и сохраняете.) Надеюсь, что это поможет.

0 голосов
/ 08 ноября 2019

Перезагрузка элементов контекста, если они находятся в файле server.xml, вряд ли будет работать, поскольку «... файл server.xml не может быть перезагружен без перезапуска Tomcat» [1]. Что вы можете попробовать, так это создать файл в "/META-INF/context.xml"[1] и добавить туда контекст.

Затем вы можете заменить файл war новыми файлами контекста. без перезагрузки сервера.

Или вы можете запрограммировать перезагрузку сервера при необходимости. См. [2]

источник:[1] https://tomcat.apache.org/tomcat-8.5-doc/config/context#Defining_a_context[2] Java - Tomcat: перезагрузить context.xml без перезапуска сервера

...