logo

Java Cron-Ausdruck

Die Technologie verändert sich ständig von Tag zu Tag. Manchmal müssen wir regelmäßig einen Job auf dem Server ausführen. Die manuelle Ausführung des Jobs auf dem Server ist eine schwierige Aufgabe und kann daher vom Benutzer oder Administrator nicht mehrmals ausgeführt werden. Um dieses Problem zu lösen, Cron hilft dem Programmierer, einen Job regelmäßig auf dem Server auszuführen. Es wird häufig für die automatisierte Systemwartung und -bewunderung verwendet. Daneben können wir auch verwenden Cron-Ausdruck in der Webentwicklung. Es gibt viele Situationen, in denen eine Webanwendung möglicherweise regelmäßig eine bestimmte Aufgabe ausführen muss.

In diesem Abschnitt werden wir das besprechen Java Cron-Ausdrücke , es funktioniert und wird umgesetzt Java Quartz-Planer .

Was ist Cron?

Im Grunde ist Cron ein Dienstprogramm, das eine Aufgabe plant. Es ermöglicht dem Benutzer, eine Aufgabe regelmäßig zu einer bestimmten Zeit, einem bestimmten Datum, einem bestimmten Monat, einem bestimmten Zeitpunkt und einem bestimmten Jahr zu planen. Es wird häufig in automatisierten Prozessen eingesetzt, bei denen kein menschliches Eingreifen erforderlich ist.

Java Cron-Ausdruck

Cron-Ausdruck

In Java werden Cron-Ausdrücke verwendet, um Instanzen von zu konfigurieren CronTrigger Klasse. Es ist eine Unterklasse von org.quartz.Trigger Klasse. Ein Cron-Ausdruck ist eine Zeichenfolge oder ein Ausdruck, der aus sechs oder sieben Feldern (Zeiteinheit) besteht. Es beschreibt einzelne Details des Zeitplans und des Befehls.

 

Ein Cron-Ausdruck kann sowohl einfach als auch komplex sein. Zum Beispiel,

Einfach: * * * * ? * (Sternchen kennzeichnet Felder)

Komplex: 0 0/4 12,15,3-35,52 ? Mai, Juni, Juli DI-SA 2002-2010.

Beachten Sie außerdem, dass ein Cron-Ausdruck wie folgt in verschiedenen Stilen geschrieben werden kann. Beispielsweise haben die folgenden drei Cron-Ausdrücke dieselbe Bedeutung.

  • 0 10 9 ? * *
  • 0 10 9 * * ?
  • 0 10 9 * * ? *

Alle drei Ausdrücke werden täglich um 9:10 Uhr ausgeführt.

Im Cron-Ausdruck verwendete Felder

In Cron-Ausdrücken wird die Zeiteinheit als bezeichnet Feld . Diese sind durch Leerzeichen getrennt und können alle zulässigen Werte mit verschiedenen Kombinationen der zulässigen Zeichen für dieses Feld enthalten. Es zeigt die Felder in der erwarteten Reihenfolge an. Die folgende Tabelle zeigt die Zeiteinheit und die entsprechenden Werte sowie Symbole, die mit den Ausdrücken verwendet werden können.

Feldname Erforderlich Zulässige Werte Zulässige Sonderzeichen und Symbole in Feldern
Sekunden Ja 0-59 , - * /
Protokoll Ja 0-59 , - * /
Std Ja 0-23 , - * /
Monatstag Ja -31 , - * ? / LW C
Monat Ja 0-11 oder JAN-DEZ , - * /
Wochentag Ja 1-7 oder SO-SA , - * ? / L C #
Jahr Optional leer oder 1970-2099 , - * /

Spezielle Symbole und Buchstaben, die im Cron-Ausdruck verwendet werden

Sternchen (*): Das Symbol wird verwendet, wenn wir ein Ereignis zu jeder Zeiteinheit (Minute, Sekunde, Stunde) ausführen möchten. Wenn beispielsweise * mit der Zeiteinheit Minute verwendet wird, bedeutet dies, dass ein Ereignis jede Minute automatisch ausgeführt wird.

Fragezeichen (?): Das Symbol wird in den Feldern wie Tag des Monats und Tag der Woche verwendet. Es bezeichnet den beliebigen Wert und ignoriert den Feldwert. Angenommen, wir möchten am 2. eines jeden Monats ein Skript ausführen, ohne uns darum zu kümmern, welcher Wochentag in den 2. Tag des Monats fällt. In diesem Fall sollten wir ein Fragezeichensymbol angeben ( ?) im Feld „Wochentag“.

Bindestrich (-): Das Symbol dient zur Angabe des Bereichs. Es bestimmt den Wertebereich. Wenn beispielsweise ein Stundenfeld definiert ist als , bedeutet, dass ein Ereignis zur 4. und 5. Stunde ausgeführt wird.

Komma (,): Es wird verwendet, um durch Komma getrennte Werte der Felder zu definieren. Zum Beispiel Fr, Sa, So usw.

Schrägstrich (/): Es wird verwendet, um Werte der angegebenen Zeiteinheit zu erhöhen. Angenommen, wir möchten ein Ereignis nach 10 Minuten starten, danach müssen wir dasselbe Ereignis nach 20 Minuten ausführen, die nächste Ausführung nach 30 Minuten und so weiter. In diesem Fall geben wir die Startzeit und den Inkrementalwert an, getrennt durch einen Schrägstrich.

Zum Beispiel, wenn 10/10 Wenn im Minutenfeld angegeben wird, bedeutet dies, dass das erste Ereignis nach 10 Minuten ausgeführt wird und die nächste Ausführung nach 20 Minuten einer Stunde erfolgt, also nicht.

L (Letzter): Die Verwendung von L hat in verschiedenen Bereichen unterschiedliche Bedeutung.

  • Wenn es in der verwendet wurde Feld bezeichnet es laut Kalender den letzten Tag des Monats.
  • Wenn es mit einem Offsetwert wie verwendet wurde L-5 . Es bezeichnet die 5Thbis zum letzten Tag des Kalendermonats.
  • Wenn es in der verwendet wurde Feld bezeichnet es den letzten Tag der Woche. Es kann auch mit anderen Werten im Feld verwendet werden. Zum Beispiel, 7L bezeichnet die letzten Samstag .

IN: Letzteres repräsentiert die Wochentage (Montag bis Freitag). Es ermittelt den Wochentag, der dem angegebenen Tag des Monats am nächsten liegt.

Zum Beispiel, wenn wir angeben 5W Im Feld „Tag des Monats“ bedeutet dies, dass wir den Wochentag in der Nähe der 5 bestimmenThdes Monats.

  • Wenn die 5Thdes Monats ist Samstag , ein Ereignis wird ausgelöst 9Th des Monats.
  • Wenn die 5Thdes Monats ist Sonntag , ein Ereignis wird ausgelöst elfTh des Monats.

Möglicherweise liegt ein anderer Fall vor. Vermuten , 1stdes Monats Samstag ist, findet am 3. eine Veranstaltung stattrddes Monats. Dies bedeutet, dass das Ereignis oder Skript im Vormonat nicht ausgeführt wurde.

Hash (#): Es stellt das n-te Vorkommen eines Wochentags im Monat dar. Beispielsweise kann der dritte Freitag im Monat als angegeben werden 6#3 .

Warum sollten wir Cron-Ausdrücke verwenden?

Es gibt verschiedene Gründe, Cron-Ausdrücke zu verwenden. Einige von ihnen sind:

Arrayliste in Java
  • Wir können zwischengespeicherte Datendateien in bestimmten Abständen ablaufen lassen und löschen.
  • Wir können tägliche Newsletter und E-Mails planen.
  • Wir können Aufgaben mit langer Laufzeit so planen, dass sie über ein Befehlszeilenskript ausgeführt werden, anstatt sie über ein Webskript auszuführen. Zum Beispiel Videos kodieren oder Massen-E-Mails versenden.

Beispiel für Cron-Ausdrücke

Sehen wir uns einige gängige Cron-Ausdrücke an, die spezielle Symbole und Felder verwenden.

Cron-Ausdruck Bedeutung von Cron-Ausdrücken
0 12 * * ? Es bedeutet, dass ein Job jeden Tag um 12:00 Uhr (Mittag) ausgeführt wird.
0/5 13,18 * * ? Dies bedeutet, dass ein Job alle fünf Minuten ausgeführt wird, beginnend um 13:00 Uhr und endend um 13:55 Uhr und dann jeden Tag um 18:00 Uhr beginnend und um 18:55 Uhr endend.
0-5 13 * * ? Dies bedeutet, dass ein Job jeden Tag jede Minute von 13:00 Uhr bis 13:05 Uhr ausgeführt wird.
15,45 13 ? 6 Di Dies bedeutet, dass ein Job jeden Dienstag im Juni um 13:15 Uhr und 13:45 Uhr ausgeführt wird.
30 9? * MO-FR Dies bedeutet, dass ein Job jeden Montag, Dienstag, Mittwoch, Donnerstag und Freitag um 9:30 Uhr ausgeführt wird.
30 9 15 * ? Dies bedeutet, dass ein Job am 15. Tag jedes Monats um 9:30 Uhr ausgeführt wird.
0 18 L * ? Dies bedeutet, dass ein Job am letzten Tag jedes Monats um 18:00 Uhr ausgeführt wird.
0 18 L-3 * ? Dies bedeutet, dass ein Job am drittletzten Tag jedes Monats um 18:00 Uhr ausgeführt wird.
30 10 ? *5L Dies bedeutet, dass ein Job am letzten Donnerstag jedes Monats um 10:30 Uhr ausgeführt wird.
0 10 ? * 23 Dies bedeutet, dass ein Job jeden dritten Montag im Monat um 10:00 Uhr ausgeführt wird.
0 0 10/5 * ? Dies bedeutet, dass ein Job ab dem 10. Tag des Monats fünf Tage lang jeden Tag um 12 Uhr ausgeführt wird.
0 11 11 11 11 ? Es bedeutet, dass ein Job jeden 11. November um 11:11 Uhr ausgeführt wird
0 15 10 ? * 6L 2002-2005 In den Jahren 2002, 2003, 2004 und 2005 fand an jedem letzten Freitag im Monat um 10:15 Uhr ein Brand statt.
0 0 0 ? * MEINE#1 Dies bedeutet, dass ein Job am ersten Montag des Monats um Mitternacht ausgeführt wird.
0 0 0 LW * * Es bedeutet, dass ein Job am letzten Wochentag des Monats um Mitternacht ausgeführt wird.
0 0/30 8-10 * * * Dies bedeutet, dass ein Job täglich um 8:00, 8:30, 9:00, 9:30, 10:00 und 10:30 Uhr ausgeführt wird.

Spezielle Einstellung in Cron-Ausdrücken

Neben dem oben genannten Sonderzeichen unterstützt der Cron-Ausdruck auch einige vordefinierte Sonderwerte. Diese Werte können anstelle der Felder verwendet werden.

    @jährlich oder @jährlich:Es führt einmal im Jahr einen Job aus. Zum Beispiel, '0 0 0 1 1 *' .@monatlich: Der Job wird einmal im Monat ausgeführt. Zum Beispiel, '0 0 0 1 * *'. @wöchentlich: Der Job wird einmal pro Woche ausgeführt. Zum Beispiel, '0 0 0 * * 0'. @täglich oder @mitternacht:Der Job wird einmal täglich ausgeführt. Zum Beispiel, '0 0 0 * * *'. @stündlich: Der Job wird stündlich ausgeführt. Zum Beispiel, '0 0 * * * *'.

Verwendung des Cron-Ausdrucks in Java

Java bietet ein Open-Source-Jobplanungssystem, das einen Job für eine bestimmte Zeiteinheit plant. Wir können den Quartz Scheduler von der offiziellen Website herunterladen.

In der Programmierung ist Job eine Klasse, die die auszuführende Aufgabe enthält. Aber die Frage ist, wie man es plant. Zum Planen eines Jobs definieren wir einen Auslöser und geben an, wann der Job ausgeführt wird.

Wenn wir den Quartz-Scheduler implementieren möchten, können wir die Abhängigkeit wie folgt hinzufügen:

 org.quartz-scheduler quartz 2.2.1 

Hinweis: Bevor Sie das folgende Java-Programm ausführen, stellen Sie sicher, dass Sie es hinzugefügt haben Quarz-2.2.1.jar Datei im Pfad, andernfalls erhalten Sie eine Fehlermeldung.

Sehen wir uns die Implementierung von Cron-Ausdruck und -Job durch ein Java-Programm an.

Schritt 1: Erstellen Sie ein Maven-Projekt. Wir haben mit dem Namen erstellt CronBeispiel .

Schritt 2: Erstellen Sie innerhalb des Projekts nämlich zwei Pakete com.javatpoint.app Und com.javatpoint.job . Im ersten Paket definieren wir die Hauptklasse und im zweiten Paket definieren wir die Jobs (in unserem Fall beträgt die Anzahl der Jobs fünf).

Schritt 3: Fügen Sie in die Datei pom.xml die folgende Abhängigkeit ein. Es lädt automatisch die erforderlichen JAR-Dateien für das Projekt herunter. Die POM-Datei sieht wie folgt aus:

 4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1 

Schritt 4: Erstellen Sie fünf Jobs (im Paket com.javatpoint.job), die Sie ausführen möchten. In unserem Fall haben wir die folgenden fünf Jobs definiert.

Job1.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job1 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job1 --->>> Hello user! Time is ' + new Date()); } } 

Job2.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job2 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job2 --->>> Hello user! Time is ' + new Date()); } } 

Job3.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job3 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job3 --->>> Hello user! Time is ' + new Date()); } } 

Job4.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job4 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job4 --->>> Hello user! Time is ' + new Date()); } } 

Job5.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job5 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job5 --->>> Hello user! Time is ' + new Date()); } } 

Schritt 5: Erstellen Sie die Hauptklasse mit dem Namen MyApp.

MyApp.java

 package com.javatpoint.app; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.javatpoint.job.Job1; import com.javatpoint.job.Job2; import com.javatpoint.job.Job3; import com.javatpoint.job.Job4; import com.javatpoint.job.Job5; public class MyApp { public static void main(String args[]) { try { JobDetail job1 = JobBuilder.newJob(Job1.class) .withIdentity('job1', 'group1').build(); Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger1', 'group1') .withSchedule(CronScheduleBuilder.cronSchedule('0/5 * * * * ?')) .build(); Scheduler scheduler1 = new StdSchedulerFactory().getScheduler(); scheduler1.start(); scheduler1.scheduleJob(job1, trigger1); JobDetail job2 = JobBuilder.newJob(Job2.class) .withIdentity('job2', 'group2').build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger2', 'group2') .withSchedule(CronScheduleBuilder.cronSchedule(new CronExpression('0/7 * * * * ?'))) .build(); Scheduler scheduler2 = new StdSchedulerFactory().getScheduler(); scheduler2.start(); scheduler2.scheduleJob(job2, trigger2); JobDetail job3 = JobBuilder.newJob(Job3.class) .withIdentity('job3', 'group3').build(); Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger3', 'group3') .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(13, 46)) .build(); Scheduler scheduler3 = new StdSchedulerFactory().getScheduler(); scheduler3.start(); scheduler3.scheduleJob(job3, trigger3); JobDetail job4 = JobBuilder.newJob(Job4.class) .withIdentity('job4', 'group4').build(); Trigger trigger4 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger4', 'group4') .withSchedule(CronScheduleBuilder.weeklyOnDayAndHourAndMinute(3, 13, 46)) .build(); Scheduler scheduler4 = new StdSchedulerFactory().getScheduler(); scheduler4.start(); scheduler4.scheduleJob(job4, trigger4); JobDetail job5 = JobBuilder.newJob(Job5.class) .withIdentity('job5', 'group5').build(); Trigger trigger5 = TriggerBuilder .newTrigger().withIdentity('cronTrigger5', 'group5') .withSchedule(CronScheduleBuilder.monthlyOnDayAndHourAndMinute(28, 13, 46)) .build(); Scheduler scheduler5 = new StdSchedulerFactory().getScheduler(); scheduler5.start(); scheduler5.scheduleJob(job5, trigger5); Thread.sleep(100000); scheduler1.shutdown(); scheduler2.shutdown(); scheduler3.shutdown(); scheduler4.shutdown(); scheduler5.shutdown(); } catch (Exception e) { e.printStackTrace(); } } } 

Wenn wir alle oben genannten Schritte abgeschlossen haben, sieht das Projektverzeichnis wie folgt aus:

Java Cron-Ausdruck

Schritt 6: Führen Sie das obige Java-Programm aus, um die Ausgabe anzuzeigen.

Java Cron-Ausdruck

Wir beobachten, dass jeder Job in einem bestimmten Zeitintervall ausgeführt wird.