2010-12-08 5 views
36

Ich lese die Spring 3.0 doc s in Bezug auf die Planung. Ich lehne mich an Spring's JobDetailBean für Quartz. Jedoch hat die @Scheduled Annotation mein Auge gefangen genommen. Es scheint, dass dies eine andere Möglichkeit ist, die Aufgabe mit dem Spring Framework zu planen. Auf der Grundlage der Dokumente stellt Frühling drei Wege Planung:Spring Scheduling: @ Scheduled vs Quartz

  1. @Scheduled
  2. Via Quartz
  3. Via JDK Timer

ich kein Interesse an der JDK Timer haben. Warum sollte ich @Scheduled über Quarz wählen? (Wenn ich Quarz erwähne, meine ich Spring Beans Wrapper für Quartz).

Angenommen, mein Anwendungsfall ist komplex genug, dass ich mit einem Webdienst eines Drittanbieters kommunizieren und Daten in bestimmten Intervallen importieren und exportieren kann.

Antwort

28

Quartz ist um eine Größenordnung 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, sogar mit der API-Unterstützung von Spring.

Wenn alles, was Sie brauchen, ist Methoden auf eine Bohne alle X Sekunden, oder auf einem chronologischen Zeitplan auszuführen, dann @Scheduled (oder die verschiedenen Optionen in Spring <task> config schema) ist wahrscheinlich genug

+7

"Es ist [Quarz] ein bisschen ein Schwein" - es ist 2 Jahre später und ich mache den gleichen Vergleich wie @chris. Ist Quarz immer noch schwierig über Spring zu benutzen? – Edward

+5

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

+1

Nein, @Scheduled unterstützt Cluster- oder Multi-Node-Umgebungen nicht. Dies scheint die einzige große Einschränkung zu sein und der Hauptgrund dafür, dass viele Leute immer noch Quartz verwenden. – BrianC

1

Ich habe meine eigenen zu erklären, Erfahrung bezüglich der Verwendung von @Scheduled gegenüber Quartz als Scheduling-Implementierung in einer Spring-Anwendung.

Planen von Jobs hatten die folgenden Anforderungen:

  • Endanwender die Möglichkeit, (definieren Ausführungszeit) zu speichern und Zeitplan sollte ihre eigenen Aufgaben
  • Geplante Aufträge während der Server-Ausfallzeiten sollten von Jobs Warteschlange nicht weggelassen erhalten
  • Daher müssen wir versuchen Quartz-Implementierung (Version 2.2.3) zu verwenden, um Persistenz von Jobs in einer Datenbank zu unterstützen. Einige grundlegende Schlussfolgerungen sind die folgenden:

  • Integration mit einer Spring 4 MVC-Anwendung ist überhaupt nicht schwer mit quartz.properties Datei.
  • Wir hatten die Möglichkeit, eine zweite Datenbank zum Speichern der Aufträge aus der Hauptdatenbank auszuwählen.
  • Jobs, die während der Server-Downtime geplant werden, werden so lange ausgeführt, wie der Server hochfährt.
  • Als Bonus haben wir es geschafft, in der Hauptdatenbank einige nützliche (und benutzerorientiertere) Informationen über benutzerdefinierte geplante Jobs zu speichern, die die benutzerdefinierten JobListener und TriggerListener verwenden.
  • Quartz ist eine sehr hilfreiche Bibliothek in Anwendungen mit komplexeren Planungsanforderungen.