Frühjahrsplanung: @Scheduled vs. Quartz

Lesezeit: 4 Minuten

Benutzeravatar von Chris
Chris

Ich lese die Frühling 3.0 docs zur Terminplanung. Ich tendiere zu Springs JobDetailBean für Quartz. Allerdings ist die @Geplant Anmerkung ist mir ins Auge gefallen. Es scheint, dass dies eine andere Möglichkeit ist, Aufgaben mit dem Spring Framework zu planen. Basierend auf den Dokumenten bietet Spring drei Möglichkeiten der Planung:

  1. @Geplant
  2. Über Quarz
  3. Über JDK-Timer

Ich habe kein Interesse am JDK Timer. Warum sollte ich @Scheduled gegenüber Quartz wählen? (Wenn ich Quartz erwähne, meine ich die Verwendung von Spring’s Bean Wrapper für Quartz).

Angenommen, mein Anwendungsfall ist so komplex, dass ich mit einem Drittanbieter-Webdienst kommunizieren werde, um Daten in bestimmten Intervallen zu importieren und zu exportieren.

Quartz ist um Größenordnungen komplexer als der eingebaute Scheduler von Spring, einschließlich der Unterstützung für persistente, transaktionale und verteilte Jobs. Es ist jedoch ein bisschen wie ein Schwein, selbst mit der API-Unterstützung von Spring.

Wenn Sie nur alle X Sekunden oder nach einem Cron-Zeitplan Methoden auf einer Bean ausführen müssen, dann @Scheduled (oder die verschiedenen Optionen in Spring’s <task> Konfigurationsschema) reicht wohl

  • “Es ist [Quartz] ein bisschen ein Schwein” – es ist 2 Jahre später und ich mache den gleichen Vergleich wie @chris. Ist Quartz immer noch schwierig über Spring zu verwenden?

    – Eduard

    21. Februar 2013 um 16:13 Uhr

  • Unterstützt @Scheduled CLUSTER? Wenn ja, wie kann ich es erreichen?

    – Rushabh Patel

    17. Juli 2015 um 8:24 Uhr

  • Nein, @Scheduled unterstützt keine Cluster- oder Multi-Node-Umgebungen, was die einzige große Einschränkung zu sein scheint und der Hauptgrund, warum viele Leute immer noch Quartz verwenden.

    – BrianC

    9. Dezember 2016 um 16:38 Uhr

  • Ich habe Quarz mit dem Wrapper von Spring verwendet und ein Scheduler-Modul für unser Unternehmen entwickelt. Ich finde es eine gute Wahl. Quarz mit Feder ist nicht komplex. Und es funktioniert perfekt in einer geclusterten Umgebung. Wir haben kein Problem gefunden, damit zu arbeiten.

    – Lernender

    6. Februar 2017 um 11:17 Uhr

  • Schöner Artikel von Khalid Saleem – khalidsaleem.blogspot.in/2015/03/…. Grundsätzlich ist Spring Scheduler (Spring 3.0+) eine wirklich leichte Implementierung, die für einfache Planungsanforderungen ausreicht und Unterstützung für Anmerkungen sowohl für die Aufgabenplanung als auch für die Ausführung asynchroner Methoden bietet. Es bietet Unterstützung für feste Raten und Verzögerungen sowie Cron-basierte Planung. Quartz bietet jedoch Unterstützung für Funktionen auf Unternehmensebene wie JTA und Clustering. Es wird mit JobPersistence (JDBC- und RAM-Speicher) geliefert, das für Fail-Safe- und Load-Balancing-Zwecke verwendet werden kann.

    – Mahesh

    26. Juni 2017 um 18:02 Uhr

Ich muss meine eigenen Erfahrungen in Bezug auf die Verwendung von angeben @Scheduled gegen Quartz als Scheduling-Implementierung in einer Spring-Anwendung.

Das Planen von Jobs hatte die folgenden Anforderungen:

  • Endbenutzer sollten die Möglichkeit haben, ihre eigenen Aufgaben zu speichern und zu planen (Ausführungszeit festzulegen).
  • Geplante Jobs während Serverausfallzeiten sollten nicht aus der Jobwarteschlange ausgelassen werden

Daher müssen wir versuchen, die Quartz-Implementierung (Version 2.2.3) zu verwenden, um die Persistenz von Jobs in einer Datenbank zu unterstützen. Einige grundlegende Schlussfolgerungen sind die folgenden:

  • Die Integration in eine Spring 4 MVC-Anwendung ist mit der Dateiquarz.properties überhaupt nicht schwierig.
  • Wir hatten die Möglichkeit, eine zweite Datenbank zum Speichern der Jobs aus der Hauptdatenbank auszuwählen.
  • Jobs, die während der Serverausfallzeit geplant sind, werden ausgeführt, solange der Server hochfährt.
  • Als Bonus haben wir es geschafft, in der Hauptdatenbank einige nützliche (und benutzerorientiertere) Informationen über benutzerdefinierte geplante Jobs zu verwalten, die benutzerdefinierte verwenden JobListener und TriggerListener.
  • Quartz ist eine sehr hilfreiche Bibliothek in Anwendungen mit komplexeren Planungsanforderungen.

Nach Quartz-Dokumentation

Wir können einige weitere und komplexe Funktionen verwenden, die es in @Scheduler nicht gibt. zum Beispiel:

  1. in Quartz können wir mit einen Scheduler in den Stand-by-Modus versetzen
    scheduler.standby(); und planen Sie es neu mit scheduler.start();.
  2. Herunterfahren eines Schedulers vor Ausführung des Jobs oder danach mit
    scheduler.shutdown(true); und scheduler.shutdown(false);
  3. Speichern eines Jobs für die spätere Verwendung und wenn Sie den Job benötigen, können Sie ihn auslösen.

JobDetail job1 =newJob(MyJobClass.class).
withIdentity("job1","group1").
storeDurably().
build();

  1. Fügen Sie den neuen Job zum Planer hinzu und weisen Sie ihn an, den vorhandenen Job durch den angegebenen Namen und die Gruppe (falls vorhanden) zu “ersetzen”.

JobDetail job1 = newJob(MyJobClass.class).
withIdentity("job1", "group1").
build();

Benutzeravatar von Cyril Sojan
Cyril Sojan

Im Frühjahr konnten Sie Aufgaben mit FixedRate, FixedDelay und Cron planen. Aber die meisten geplanten Jobs erfordern eine dynamische Behandlung der Ausführungszeit. Daher ist es in diesem Szenario besser, Quartz zu verwenden, da es die Möglichkeit bietet, geplante Jobs sowohl in DBJobstore als auch in RAMJobstore zu speichern.

1441370cookie-checkFrühjahrsplanung: @Scheduled vs. Quartz

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy