2009-04-30 12 views
7

Ich bin auf der Suche nach einer effektiven Möglichkeit, eine Methode jeden Tag um 15 Uhr auszuführen, unabhängig davon, wann die Anwendung anfänglich ausgeführt wurde oder wie lange sie bereits ausgeführt wurde.Java - Planen einer täglichen Aufgabe

Dies muss ohne O Intervention (ex. Windows-Taskplaner)

Ich habe experimentiert mit java.util.Timer in variiert Konfigurationen vollständig von der Anwendung durchgeführt werden, aber ich habe keinen Erfolg gehabt.

Jede Hilfe wäre willkommen.

Danke.

+1

Welche Schwierigkeit haben Sie? Es sollte einfach sein, einen Timer regelmäßig zu aktivieren und die Uhrzeit zu überprüfen und sich die Cron-Tabelle Ihrer Anwendung anzusehen, um zu sehen, ob etwas getan werden sollte. Nein? – jottos

Antwort

16

Sie sollten einen Blick auf Quartz werfen, die ein Java-basiertes Job-Scheduling-System ist.

+0

Verwenden Sie auf jeden Fall Quarz. Es ist mein Lieblingsplaner. Läuft als Charme – Maksim

+0

Ich habe mich immer gewundert. Sie benötigen eine laufende Anwendung, um Quartz an erster Stelle zu betreiben, oder? Ist es möglich, es auszuführen, wenn keine Anwendung gestartet wurde? Wie kann eine Java-Anwendung im Hintergrund ausgeführt werden? (vielleicht in einem TrayIcon oder so ähnlich?) – OscarRyz

+0

Ja, es muss eine Java-Anwendung ausgeführt werden, die Quartz enthält. Sehen Sie sich http: // stackoverflow an.com/questions/326509/Java-Hintergrund-Daemon-Service-Cross-Plattform-Best-Practice für die Ausführung von Java-Anwendungen im Hintergrund. – Mark

1

Sie können einen Thread starten, der die Differenz zu den nächsten 15 Uhr berechnet und für diese Zeit schläft. Wenn es aufwacht, führt es die Methode aus und berechnet und schläft. Hast du das gemeint?

2

Sie wollen wahrscheinlich so etwas wie die quartz engine verwenden, um es Dinge tun kann, wie Aufgaben ausführen, die (wie bei einem ahem Absturz) verpaßt und es nimmt die Arbeit aus versuchen Threads zu verwalten.

Zum Beispiel, wenn Sie Threads verwenden und schlafen legen und 86400 Sekunden (einen Tag) später aufwachen, werden Sie aufwachen und Stunde spät (Tag = 82800 Sekunden) oder früh (Tag = 90000 Sekunden) bei DST-Änderung so über Tag, mit dem, was Lösung Sie

2

Eine eingebaute in JDK Weise zu tun, was andere vorgeschlagen und ersten berechnen:

  • current - desiredTime

Dann können Sie so etwas wie a schedule executor verwenden, um die Aufgaben zu unterbreiten und sie mit einer bestimmten Verzögerung ausgeführt werden. Dies ist viel einfacher als die Optionen, die Sie mit Frameworks wie Quartz haben, erfordert aber keine externe Abhängigkeit.

Sie sollten auch immer angeben, welches JDK Sie verwenden, damit die Leute Lösungen für Ihre Version des JDK bereitstellen können.

1

Jcrontab

Jcrontab ist ein Scheduler in Java geschrieben. Das Projektziel ist die Bereitstellung eines voll funktionsfähigen Zeitplans für Java-Projekte.

Verwandte Themen