Viele Beiträge sagten, wir können ScheduledExecutorService
in einem ServletContextListener
verwenden. Aber ich möchte einen Timer auf irgendeine Art von Umständen starten und dann bei einem anderen Umstand stoppen. Starten Sie beispielsweise einen Timer in Anfrage A von Client A, stoppen Sie ihn in Anfrage B von Client A oder Client B. Soll ich den Timer in der Sitzung speichern oder nicht?Wie starte und beende ich einen Timer oder einen Job in der Tomcat-Servlet-Anfrage dynamisch?
Das eigentliche Problem ist dies: Ich erstelle eine Bestellung von einer Web-Anfrage, ich möchte die Bestellung stornieren, wenn sie nicht nach 24 Stunden bezahlt wurde.
Um die Dinge klar zu machen, nehme ich die Situation so: Ich erstelle ein Objekt aus einer Web-Anfrage, ich möchte das Objekt löschen, wenn es nach 10 Sekunden nicht behandelt wurde. War es in so kurzer Zeit gut, einen Zeitplan-Job wie alle 5 oder 8 Sekunden auszuführen? Ich möchte den Job genau nach 10 Sekunden oder sogar 1 Sekunde erledigen.
Diese Antwort hier erklärt, wie man einen Testamentsvollstrecker Service in einem Web-Kontext instanziieren: http://stackoverflow.com/a/9186070/2892670 – tchambers
Dank. Aber ich möchte etwas anderes. Ich bearbeite meine Frage, um es klarzustellen. –
Ich bin nicht sicher, dass es ein sehr gutes Design ist, aber Sie könnten eine [PassiveExpiringMap] verwenden (https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/map/ PassiveExpiringMap.html) um die Objekte zu speichern - vermutlich benötigen Sie irgendeine Art von ID oder Schlüssel, um sie nachzuschlagen. Guava hat ein ähnliches Konzept in [CacheBuilder] (https://google.github.io/guava/releases/17.0/api/docs/com/google/common/cache/CacheBuilder.html), wo Sie den '.expireAfterWrite verwenden können (10, TimeUnit.SECONDS) Methode während des Aufbaus. – tchambers