Ich habe eine ScheduledExecutorService
und ich habe eine Aufgabe alle 15 Minuten (in einer Web-Anwendung in Tomcat).
In einem ServletContextListener
in contextDestroyed
ich getan habe:Wie funktioniert das Herunterfahren in Executoren?
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
scheduler.shutdown();
}
});
Der Scheduler wie gestartet:
final Runnable r = new Runnable(){
@Override
public void run() {
System.out.println("My task");
//Do some task
}
};
updater.scheduleWithFixedDelay(r, 30, 15, TimeUnit.MINUTES);
Frage: Auf shutdown
jede verbleibende Aufgabe nicht ausgeführt wird.
Es läuft eine Aufgabe, aber ich sehe keine Protokolle, also scheint es, dass sie nicht ausgeführt wird. Warum?
UPDATE:
Wenn ich anfangen Kater und dann nach 2 Minuten I Abschaltung dann ist nicht die Aufgabe als geplant betrachtet und muss laufen? Ich meine, wenn eine Aufgabe eingereicht wird, gilt sie nicht als ausstehend? Oder muss es tatsächlich laufen?
ich in Tomcat.The Abschaltung laufen die ServletContextListener ist im Inneren. Ich höre mit 'shutdown' – Jim
Normalerweise müssen Sie Ihre eigene Logik implementieren entweder 1) -Prozess all (oder einige mit einem Timeout) ausstehende Nachrichten in der Warteschlange oder 2) die Nachrichten speichern und verarbeiten, wenn die Anwendung neu gestartet wird (in der Regel über JMQ mit persistenten Queues erledigt) – AngerClown
Ich verstehe deine Frage @Jim immer noch nicht ganz. Können Sie die Frage bearbeiten und genauer sein? Sie stellen Shutdown-Code zur Verfügung, aber vielleicht ist Ihr Problem, dass Ihre Hintergrund-Task überhaupt nicht ausgeführt wird? – Gray