Mein Programm hat eine Komponente - den Scheduler -, die es anderen Komponenten ermöglicht, Punkte in der Zeit zu registrieren, zu denen sie zurückgerufen werden möchten. Dies sollte ähnlich wie der Unix-Cron-Dienst funktionieren, d. e. Sie teilen dem Scheduler mit, dass er mich um zehn Minuten nach jeder vollen Stunde benachrichtigen soll.Java-Bibliotheksklasse für die geplante Ausführung von "Callbacks"?
Ich weiß, es gibt keine echten Callbacks in Java.
Hier ist mein Ansatz, gibt es eine Bibliothek, die das Zeug schon tut? Fühlen Sie sich frei, auch Verbesserungen vorzuschlagen.
Register Anruf Scheduler passiert:
- eine Zeitangabe enthält, Stunde, Minute, Sekunde, Jahr Monat, dom, dow, wobei jedes Element nicht spezifiziert sein kann, was bedeutet, „führen Sie es jede Stunde/Minute usw. " (Genau wie crontabs)
- ein Objekt, das Daten enthält, die dem aufrufenden Objekt mitteilen, was zu tun ist, wenn es vom Scheduler gemeldet wird. Der Scheduler verarbeitet diese Daten nicht, sondern speichert sie und gibt sie bei Benachrichtigung zurück.
- ein Verweis auf das aufrufende Objekt
Nach dem Start oder nach einer neuen Registrierungsanforderung, startet der Scheduler mit einem Kalender-Objekt der aktuellen Systemzeit und prüft, ob es irgendwelche Einträge in der Datenbank vorhanden ist, die dieses Spiel Zeitpunkt. Wenn dies der Fall ist, werden sie ausgeführt und der Prozess beginnt von vorne. Ist dies nicht der Fall, wird die Zeit im Calendar-Objekt um eine Sekunde erhöht und die Entries werden erneut überprüft. Dies wird wiederholt, bis mindestens ein Eintrag vorhanden ist. (Diskrete Ereignissimulation)
Der Scheduler wird sich dann daran erinnern, dass Zeitstempel, Schlaf und Wachen jede Sekunde, um zu prüfen, ob es schon da ist. Wenn es aufwacht und die Zeit bereits verstrichen ist, beginnt es wieder, wenn die Zeit gekommen ist und die Aufträge ausgeführt wurden.
bearbeiten: Vielen Dank für mich zu Quartz zeigt. Ich suche jedoch etwas viel kleineres.
Ja, aber ich brauchte etwas wirklich einfaches, ohne zusätzliche Abhängigkeiten. Ich habe sowieso Beharrlichkeit in meiner App behandelt, der Scheduler benötigt es selbst nicht. Ich habe allerdings Quarz auf meiner Liste, sollte ich später mehr Leistung brauchen. –
In der neuesten Version können Sie jetzt neben einer Datenbank auch Quartz-Jobs mit Terracotta zusammenfassen. –
Es ist witzig, dass Quarz-Persistenz-Funktionen als großer Vorteil angepriesen werden: in vielen Fällen sind sie nur ein großer PITA. – StaxMan