wake-up-neo.com

Wie kann der Cache von Tomcat bei der Bereitstellung einer neuen .war-Datei gelöscht werden? Gibt es eine Konfigeinstellung?

Ich habe eine einfache, weltweite Servlet-Anwendung, mit der ich gerade herumspiele und sie auf einem VPS an meinen Tomcat-Server schiebe.

Wenn ich meinen Code ändere und bereitstelle, stellt Tomcat den neu veröffentlichten Code nicht zur Verfügung (selbst wenn der Dienst erneut gestartet wird).

Ich stoppe den Dienst, dann schiebe die neue Kriegsdatei nach/webapps/und stelle sicher, dass auch der alte explodierte Ordner gelöscht wird.

Wenn ich den Server neu starte, dient er immer noch der älteren Codebase.

Gibt es eine Einstellung in der Konfiguration, um dieses Verhalten zu beenden?

Welche Ordner müsste ich auch löschen? Seien Sie bitte spezifisch (Ordner und Pfade), da ich versucht habe, einige zu löschen und nicht irgendwo hingekommen zu sein. 

32
Blankman

Sie können das Arbeitsverzeichnis löschen.

Sind Sie sicher, dass es sich nicht um ein Browser-Caching-Problem handelt?

15
Dave Newton

Ich füge das bei wirklich merkwürdigem Verhalten hinzu - wenn Sie ein paar Stunden mit WTF sprechen - versuchen Sie, das Verzeichnis /webapps/yourwebapp/WEB-INF/classes manuell zu löschen. Bei einer Java-Quelldatei, die in ein anderes Paket verschoben wurde, wird die kompilierte Klassendatei nicht gelöscht - zumindest im Fall einer explodierten Webanwendung auf TC. Dies kann Sie mit unvorhersehbarem Verhalten, insbesondere mit einem kommentierten Servlet, ernsthaft verrückt machen.

4
Hal50000

Ich bin auf ein seltsames Verhalten gestoßen, das nicht die tatsächliche Code-Basis widerspiegelte. Nach einiger Zeit mit mehreren Lösungen wurde mein Problem dadurch gelöst, dass alles unter /var/cache/Tomcat8/ manuell gelöscht wurde.

2
pkaramol

Ein bisschen zu spät für die Party, so mache ich es

  1. Entfernen Sie die Anwendung vom Manager
  2. Tomcat mit ./shutdown.sh herunterfahren
  3. Browsercache löschen
  4. Lösche die Anwendung aus Webapps und aus /work/Catalina/...
  5. Starten Sie Tomcat mit ./startup.sh
  6. Kopieren Sie die neue Version der Anwendung in /webapps und starten Sie sie.
2
svarog

Scheint ein Zeitstempel-Problem. Laut Tomcat-Dokumentation wird bei einem neuen Jsp oder Servlet eine neue _Java-Datei im Arbeitsordner erstellt, es sei denn, die _Java.class-Dateien sind neuer als die Jsp- oder Servlets.

1

Tomcat erstellt außerdem ein ROOT-Verzeichnis auf derselben Ebene wie work/. ROOT/ speichert auch das Alte. Löschen Sie ROOT zusammen mit dem Verzeichnis Catalina in work.

1
Amit

Ich bin neu bei Tomcat und dieses Problem hat mich heute verrückt gemacht. Es war sporadisch. Ich bat einen Kollegen um Hilfe, und die WAR dehnte sich aus, und eigentlich sollte es sein. 3 wird später an diesem Tag implementiert, und die ursprüngliche Version wurde wiederhergestellt.

In meinem Fall wurde das MySite.WAR auf ROOTUNDMySite erweitert. MySite wurde normalerweise serviert. Aber manchmal entschied Tomcat, dass es dem ROOT besser gefiel und alle meine Änderungen verschwanden.

Die "Lösung" besteht darin, die ROOT-Website bei jedem Einsatz des Krieges zu löschen.

1
GeekyMonkey

Ich habe eine schlechte Zeit, meine Kriegsdatei unter /etc/Tomcat7/webapps zu platzieren, aber der tatsächliche Pfad war /var/lib/Tomcat7/webapps. Vielleicht möchten Sie Sudo find / -type f -name "my-war-file.war" verwenden, um zu wissen, wo es ist.

Und entfernen Sie diese Ordner /tmp/hsperfdata_* und /tmp/Tomcat7-Tomcat7-tmp.

0
Ratata Tata

Klingt, als würde Ihr Klassenladeprogramm die Servlet-Klassen nicht laden, sobald sie aktualisiert wurden. Dies kann behoben werden, wenn Sie Ihre web.xml-Datei ändern, wodurch der Server/Container aufgefordert wird, die Servlet-Klassen erneut bereitzustellen und neu zu laden. Ich füge eine leere Zeile am Ende Ihrer web.xml hinzu, speichere sie und schaue, ob sie dies behebt. Wie ich schon sagte, könnte dies das Problem beheben oder auch nicht.

Viel Glück!

0
Mechkov

Ich hatte das gleiche Problem zweimal, aber beim zweiten Mal wurde mir klar, dass es auf Tomcat überhaupt kein Problem war. Versuchen Sie, den Cache Ihres Browsers zu löschen, aktualisieren Sie die Seite und sehen Sie nach, ob die neue Version der Seite auf Ihrem Server installiert ist wird gezeigt. Es hat mit mir gearbeitet.

0