Java Aufgabenplaner: Quartz Scheduler – vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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")                    

Empfehlungen