Ich habe eine Webanwendung, die vier Mal pro Stunde mit einer zentralen Datenbank synchronisiert. Der Prozess dauert normalerweise 2 Minuten. Ich möchte diesen Prozess als Thread bei X: 55, X: 10, X: 25 und X: 40 ausführen, damit die Benutzer das bei X: 00, X: 15, X: 30 und X: 45 wissen Sie haben eine saubere Kopie der Datenbank. Es geht nur darum, Erwartungen zu managen. Ich bin durch den Executor in java.util.concurrent
durchgegangen, aber die Planung wird mit der scheduleAtFixedRate
getan, die ich glaube, gibt keine Garantie über, wenn das tatsächlich in Bezug auf die Stunden ausgeführt wird. Ich könnte eine erste Verzögerung verwenden, um die Runnable
so zu starten, dass die erste nah an der Startzeit und dem Zeitplan für alle 15 Minuten ist, aber es scheint, dass dies wahrscheinlich zeitlich auseinander gehen würde. Gibt es eine einfachere Möglichkeit, den Thread so zu planen, dass er 5 Minuten vor jeder Viertelstunde ausgeführt wird?Run Java-Thread zu bestimmten Zeiten
Antwort
Sie können den RUNNABLE-Zeitplan für den nächsten Durchlauf festlegen.
Wie,
class Task implements Runnable {
private final ScheduledExecutorService service;
public Task(ScheduledExecutorService service){
this.service = service;
}
public void run(){
try{
//do stuff
}finally{
//Prevent this task from stalling due to RuntimeExceptions.
long untilNextInvocation = //calculate how many ms to next launch
service.schedule(new Task(service),untilNextInvocation,TimeUnit.MILLISECONDS);
}
}
}
TimerTask
behandelt diesen Fall.
Siehe schedule(TimerTask, Date)
Wenn Sie die Aufträge planen nicht haben wollen, zu halten, möchten Sie vielleicht wie Quartz in eine Job-Scheduling-Tool suchen.
Quartz wäre eine gute Passform, da Sie Anwendung ist webbasiert. Es bietet die feinkörnige zeitbasierte Planung, die Sie benötigen.
Quarz ist ein voll funktionsfähige Open-Source- Job-Scheduling-Dienst, die an der Seite von integriert mit oder verwendet werden kann, praktisch jedes Java EE oder Java SE Anwendung - vom kleinsten Stand-alone-Anwendung das größte E-Commerce-System. Quartz kann verwendet werden, um einfache oder komplexe Zeitpläne für die Ausführung von Zehnen, Hunderten oder sogar Zehntausenden von Jobs zu erstellen; Jobs, deren Aufgaben als Standard-Java Komponenten definiert sind, die virtuell ausgeführt werden können alles, was Sie programmieren können, zu tun. Der Quartz Scheduler enthält viele Enterprise-Funktionen wie JTA Transaktionen und Clustering.
- 1. Pinging der Homepage zu bestimmten Zeiten
- 2. PHP-Skript zu bestimmten Zeiten ausführen
- 3. Windows-Dienst: Arbeiten zu bestimmten Zeiten (Delphi)
- 4. Tage zwischen bestimmten Zeiten berechnen
- 5. Planen Sie lokale Benachrichtigungen zu bestimmten Zeiten am Tag
- 6. Wie Hintergrundbild zu bestimmten Zeiten mit einer Batch-Datei ändern?
- 7. Brennen von Benachrichtigungen zu bestimmten Zeiten in Django
- 8. PHP ein bestimmtes Datumsformat an bestimmten Tagen/Zeiten zu zeigen
- 9. Android - So laden Sie Daten im Hintergrund zu bestimmten Zeiten
- 10. Schneller zu Malloc mehrere kleine Zeiten oder wenige große Zeiten?
- 11. Null SqlCeTransaction zu zufälligen Zeiten
- 12. MySQL - Wie zu SUMME Zeiten?
- 13. Cron Job zwischen bestimmten Zeiten und Häufigkeit einstellen
- 14. eine Nachricht zu einem Etikett in vb.net zu bestimmten Zeiten während des Tages anzeigen
- 15. Android: Verwenden von Thread, um etwas zu bestimmten Zeiten zu tun
- 16. Der beste Weg, um zu bestimmten Zeiten in Sitecore zu veröffentlichen
- 17. FullCalendar - Deaktivieren/Blockieren Sie Zeiten an bestimmten Tagen
- 18. Befehlszeilenargumente zu docker run
- 19. Jquery Funktionen zu falschen Zeiten senden
- 20. Wie führe ich eine SQL Server-Ablaufverfolgung zum Starten und Beenden zu bestimmten Zeiten aus?
- 21. Android 2.2: Drehen des Bildschirms zu bestimmten Zeiten des Tages von Code
- 22. Automatisches Versenden von PDF-Grafiken zu bestimmten Zeiten per E-Mail von R
- 23. Wie wiederhole ich die Benachrichtigung zu bestimmten Zeiten in Android durch den Dienst
- 24. Kann ich Termine/Rückrufe zu bestimmten Zeiten jeden Tag in PhoneGap einplanen?
- 25. Drucken zu verschiedenen Zeiten der Woche
- 26. mehrere Benachrichtigungen zu verschiedenen Zeiten einstellen - Android
- 27. Selen Run Times
- 28. NSDateFormatter mit 24 Stunden Zeiten
- 29. Run Liferay Dynamische Scheduler auf bestimmten Datum und Uhrzeit
- 30. Run Datenträgerbereinigung Wenn fsutil kehrt unter einer bestimmten Größe
Dit es auf diese Weise und funktioniert wunderbar. Vielen Dank. – rmarimon
@rmarimon: NP :) Sei nur vorsichtig, dass eine 'RuntimeException' die periodische Ausführung stoppen kann. Ich wurde dadurch verbrannt, also habe ich die Antwort entsprechend bearbeitet. –
Ich habe es gerade geändert. Ich hatte es wie versuchen {} catch (Exception e) {} und dann die Umplanung. Aber das scheint endlich der richtige Ansatz zu sein. – rmarimon