Как очистить кеш tomcat при развертывании нового файла .war? Есть ли настройка конфигурации?

#java #tomcat

#java #tomcat

Вопрос:

У меня есть простое приложение-сервлет hello, world, с которым я просто играю и отправляю его на свой сервер tomcat на VPS.

Когда я вношу изменения в свой код и развертываю его, tomcat не обслуживает недавно опубликованный код (даже после повторного запуска службы).

Я останавливаю службу, затем отправляю новый файл war в /webapps/ и обязательно удаляю старую разнесенную папку.

Когда я перезапускаю сервер, он по-прежнему обслуживает старую кодовую базу.

Есть ли в конфигурации настройка, чтобы остановить это поведение?

Кроме того, какие папки мне придется удалить? Пожалуйста, будьте конкретны (папки и пути), поскольку я пытался удалить некоторые и ничего не добился.

Комментарии:

1. указывает ли tomcat на тот же каталог, в котором вы публикуете файл war? Если вы удалили расширенную версию (я предполагаю, рабочий каталог) и перезапустили сервер, я не могу придумать, как tomcat получит доступ к старому коду. Пожалуйста, просмотрите свой server.xml внимательно.

Ответ №1:

Вы можете удалить «рабочий» каталог.

Вы уверены, что это не проблема с кэшированием браузера?

Комментарии:

1. да, я уверен, я даже удалил папку work / catalini / localhost (или какую-то подобную папку), это случалось несколько раз, и это не случайно 🙂

2. Удаление содержимого в каталогах tomcat не обязательно повлияет на кеш браузера.

3. ну, новая версия записывала журналы в файл, и я попробовал firefox (сначала использовал chome).

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

5. не удаляйте work каталог. Просто удалите его содержимое. Для work запуска Tomcat должен существовать каталог (по крайней мере, пустой).

Ответ №2:

Я бы добавил, что в случае действительно странного поведения — когда вы проводите пару часов, говоря WTF — попробуйте вручную удалить /webapps/yourwebapp/WEB-INF/classes каталог. Исходный файл java, который был перемещен в другой пакет, не будет удален из скомпилированного файла класса — по крайней мере, в случае взорванного веб-приложения на TC. Это может серьезно свести вас с ума непредсказуемым поведением, особенно с аннотированным сервлетом.

Комментарии:

1. Это не интуитивно понятно… Мне пришлось бы точно скопировать то, что было развернуто, обратно в этот каталог, потому что приложение не может функционировать без этих классов. Таким образом, конечный результат ничего не изменится. Этот каталог классов воссоздается после каждого пакета maven clean.

Ответ №3:

Немного поздно для вечеринки, вот как я это делаю

  1. Отменить развертывание приложения из диспетчера
  2. Выключите tomcat с помощью ./shutdown.sh
  3. Удалить кеш браузера
  4. Удалите приложение из webapps и из /work/Catalina/...
  5. Запустите tomcat с помощью ./startup.sh
  6. Скопируйте новую версию приложения /webapps и запустите ее.

Ответ №4:

Я столкнулся с некоторым странным поведением, которое не отражало фактическую базу кода, поэтому через некоторое время, попробовав несколько решений, моя проблема была решена путем ручного удаления всего в /var/cache/tomcat8/

Комментарии:

1. В моем случае classloader находил несуществующий класс, который позже не удалось загрузить. Проблема заключалась в устаревшем файле .class, хранящемся в /var/cache/tomcat6/ …

Ответ №5:

Кажется, проблема с меткой времени. Согласно документации tomcat, если есть новый jsp или сервлет, это создаст новый файл _java в рабочей папке, если только _java.class файлы новее, чем jsp или сервлеты.

Ответ №6:

Tomcat также создает ROOT каталог на том же уровне, work/ что и . ROOT/ также кэширует старые данные. удалить ROOT вместе с Catalina каталогом work .

Ответ №7:

Я новичок в tomcat, и эта проблема сводила меня с ума сегодня. Это было спорадически. Я попросил коллегу помочь, и ВОЙНА расширилась, и это было так, как предполагалось. 3 развертывается позже в тот же день, он вернулся к исходной версии.

В моем случае MySite.WAR был расширен как до ROOT, так И до MySite. MySite обычно обслуживался. Но иногда tomcat решил, что ему больше нравится КОРНЕВОЙ, и все мои изменения исчезли.

«Решение» заключается в удалении КОРНЕВОГО веб-сайта при каждом развертывании war.

Ответ №8:

Похоже, что ваш загрузчик классов не загружает классы сервлетов после их обновления. Это может быть исправлено, если вы измените web.xml файл, который должен предложить серверу / контейнеру повторно развернуть и перезагрузить классы сервлетов. Я думаю, добавьте пустую строку в конце вашего web.xml и сохраните его, а затем посмотрите, исправит ли это проблему. Как я уже сказал, это может исправить это, а может и нет.

Удачи!

Комментарии:

1. Однако после полного удаления старой версии не должно сохраняться при перезапуске.

2. Хм, да. Обычно этого не должно быть, но стоит попробовать.

Ответ №9:

Мне не удалось поместить мой файл war в /etc/tomcat7/webapps , но реальный путь был /var/lib/tomcat7/webapps . Возможно, вы захотите sudo find / -type f -name "my-war-file.war" узнать, где он находится.

И удалите эти папки /tmp/hsperfdata_* и /tmp/tomcat7-tomcat7-tmp .

Ответ №10:

У меня была одна и та же проблема дважды, но во второй раз я понял, что это вообще не проблема на Tomcat.. Попробуйте удалить кеш вашего браузера, обновите страницу и посмотрите, отображается ли новая версия страницы на вашем сервере. У меня это сработало.

Ответ №11:

  1. В папке «/webapp» удалите файлы *.war и папки, соответствующие этим папкам (с тем же именем).
  2. Очистить папку «/ webapps / ROOT» tomcat.