4 Stimmen

Einen Cron-Ausdruck in Federn schreiben

Ich verwende springs task scheduler (ConcurrentTaskScheduler), um meine Aufgaben zu planen. Ich verwende die API

public ScheduledFuture schedule(Runnable task,Trigger trigger)

Der Trigger, den ich verwende, ist der CronTrigger.
Ich initialisiere den Trigger mit der folgenden Anweisung

Trigger trigger = new CronTrigger(cronExp);

Ich muss eine cronExp so schreiben, dass sie an einem bestimmten Datum beginnt und von da an täglich ausgeführt wird.

Ich überprüfte die API für ConcurrentTaskScheduler, aber ich konnte geeignete API zu erreichen / möglicherweise einige API verpasst haben.

Kann mir jemand einen Vorschlag machen, wie ich die oben genannte Anforderung erfüllen kann?

5voto

gutch Punkte 6821

Meines Wissens kann man die Spring-Funktion CronTrigger erst ab einem bestimmten Datum zu beginnen.

Die Cron-Syntax unterstützt es nicht, etwas täglich ab einem beliebigen Datum auszuführen; sie unterstützt EITHER täglich etwas laufen lassen OR einmal an einem beliebigen Datum laufen - aber nicht beide auf einmal. Das bedeutet, dass Sie zwei Auslöser verwenden könnten: einen Cron-Auslöser, der an Ihrem Startdatum ausgelöst wird, und einen neuen täglichen Auslöser, wenn dieser erste Auslöser auftritt.

Dies funktioniert jedoch nur, wenn der von Ihnen verwendete Cron-Trigger Jahreszahlen unterstützt, z. B. verfügt Quartz über ein optionales Jahresfeld in seinem Cron-Trigger. Spring's CronTrigger unterstützt keine Jahre. Wenn Sie also versucht haben, etwas für ein bestimmtes Datum zu planen (z. B. 0 0 12 26 1 ? für den australischen Mittag), dann würde es jedes Jahr laufen, nicht nur einmal, so dass jedes Jahr doppelte Auslöser erstellt würden.

Stattdessen empfehle ich, einen einfachen Trigger zu erstellen, der täglich ausgeführt wird, z. B:

    Trigger trigger = new CronTrigger("0 0 12 * * ?);

Ihr Code wird also täglich ausgeführt. Fügen Sie dann eine einfache Datumsprüfung in Ihren Code ein: Wenn Sie das Startdatum noch nicht erreicht haben, überspringen Sie Ihre Aufgabe, d.h.:

    if ((new Date()).after(startDate)) {
        // Run your task here
    }

0voto

santhoshkumar Punkte 62

Bitte finden Sie den folgenden Link

http://www.mkyong.com/spring/spring-quartz-scheduler-example/

In Spring haben wir, dass integrierte Quarz scheduler.Only xml Konfiguration benötigen, um den Job zu planen.There können Sie Cron Ausdruck konfigurieren, wie Sie möchten.

Ich würde vorschlagen, dass Sie Spring Quartz Scheduler Integration verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X