#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:
Немного поздно для вечеринки, вот как я это делаю
- Отменить развертывание приложения из диспетчера
- Выключите tomcat с помощью
./shutdown.sh
- Удалить кеш браузера
- Удалите приложение из webapps и из
/work/Catalina/...
- Запустите tomcat с помощью
./startup.sh
- Скопируйте новую версию приложения
/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:
- В папке «/webapp» удалите файлы *.war и папки, соответствующие этим папкам (с тем же именем).
- Очистить папку «/ webapps / ROOT» tomcat.