Java Aufgabenplaner: Quartz Scheduler
In der modernen Java-Entwicklung besteht häufig die Notwendigkeit, Code nach einem Zeitplan auszuführen: Versand von E-Mail-Newslettern, Cache-Bereinigung, Berichtserstellung oder Datensynchronisation. Für diese Zwecke gibt es die leistungsstarke Bibliothek Quartz Scheduler – den De-facto-Standard für die Aufgabenplanung im Java-Ökosystem.
Quartz Scheduler ist ein Open-Source-Framework, mit dem Sie Aufgaben (Jobs) mithilfe eines flexiblen Triggersystems erstellen, planen und verwalten können. Es unterstützt sowohl einfache Verzögerungen als auch komplexe Cron-Zeitpläne, ist ausfallsicher und kann in Spring Boot, Jakarta EE und andere Plattformen integriert werden.
Hauptfunktionen
- Flexible Planung – Unterstützung einfacher Trigger (SimpleTrigger) mit Verzögerung und Wiederholung sowie Cron-Trigger (CronTrigger) für komplexe Zeitpläne.
- Persistenz – Aufgaben und Trigger können in einer Datenbank gespeichert werden (JDBC JobStore), was die Ausführung auch nach einem Neustart der Anwendung gewährleistet.
- Clusterfähigkeit – Möglichkeit, mehrere Scheduler-Instanzen mit Koordination über die Datenbank auszuführen.
- Listener – Überwachung von Aufgabenausführungsereignissen (JobListener, TriggerListener) für Protokollierung oder zusätzliche Verarbeitung.
- Monitoring – Integrierte API zur Anzeige aktueller Aufgaben, ihres Status und des Ausführungsverlaufs.
Installation und Einbindung
Fügen Sie zunächst die Abhängigkeit zu Ihrer pom.xml (Maven) hinzu:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>Für Gradle:
implementation 'org.quartz-scheduler:quartz:2.3.2'Beispiel für die Erstellung einer einfachen Aufgabe
Erstellen wir eine Klasse, die das Interface Job implementiert. Dies ist unsere Aufgabe:
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.LocalTime;
public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Aufgabe ausgeführt um: " + LocalTime.now()); // Hier Ihr Geschäftslogik-Code }}Planung einer Aufgabe mit SimpleTrigger
Starten wir die Aufgabe nach 5 Sekunden und wiederholen sie alle 10 Sekunden:
import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;
public class SimpleSchedulerExample { public static void main(String[] args) throws SchedulerException { // 1. Scheduler erstellen Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2. Aufgabe definieren (JobDetail) JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build();
// 3. Trigger erstellen: Start nach 5 Sekunden, Wiederholung alle 10 Sekunden Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();
// 4. Aufgabe dem Trigger zuweisen und starten scheduler.scheduleJob(job, trigger); scheduler.start(); }}Verwendung von CronTrigger für komplexe Zeitpläne
Cron-Ausdrücke ermöglichen die Festlegung von Zeitplänen beliebiger Komplexität. Zum Beispiel jeden Tag um 9:30 Uhr morgens:
Trigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity("cronTrigger", "group1") Auch in der Bibliothek
E-Mail-Versand in C++: Bibliotheken und Codebeispiele
Rate limiting in Rust: Bibliotheken governor, leaky-bucket und Middleware für Webserver
mimalloc für C++: Vollständige Anleitung mit Beispielen
PDF-Generierung in Swift (iOS/macOS): Überblick über Tools und Beispiele
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und Redis