
Java-Bibliothek zum Parsen, Validieren, Migrieren und Beschreiben von Cron-Ausdrücken mit Unterstützung für mehrere Formate (Unix, Quartz, Spring) und menschenlesbarer, lokalisierter Ausgabe.
Wir definieren Cron-Ausdrücke. Und unterstützen sie.
cron-utils ist eine Java-Bibliothek zum Definieren, Parsen, Validieren und Migrieren von Cron-Ausdrücken sowie zum Erhalten von menschenlesbaren Beschreibungen für diese. Das Projekt folgt der Semantic Versioning Convention, stellt OSGi-Metadaten bereit und verwendet die Apache-2.0-Lizenz.
Download
cron-utils ist im Maven Central-Repository verfügbar.
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.2.1</version>
</dependency>
Für Android-Entwickler: cron-utils 7.0.0 setzt Android 26+ voraus. Für ältere Android-Versionen erwägen Sie die Verwendung von cron-utils 6.0.6. Wenn Sie ScheduleExpression aus Java EE verwenden, sollte diese als Laufzeitabhängigkeit bereitgestellt werden.
Aktuelle Entwicklung
Wir arbeiten derzeit daran, die Codebasis auf JDK 16 zu aktualisieren, um sicherzustellen, dass sie bei Veröffentlichung vollständig mit JDK 17 kompatibel sein wird.
Derzeit entwickeln wir eine neue Generation von Cron-Deskriptoren mithilfe neuronaler Übersetzung! Jede Art von Beiträgen ist willkommen: von Hilfe bei der Datensatzerstellung bis hin zum Training von Modellen für maschinelles Lernen und Hilfsprogrammen, um sie zu laden! Wenn Sie interessiert sind, folgen Sie bitte Issue #3
Funktionen
Verwendungsbeispiele
Im Folgenden präsentieren wir einige Beispiele. Diese und weitere finden Sie in einem Beispiel-Repository, das wir erstellt haben, um die cron-utils-Bibliotheken vorzustellen!
Cron-Definitionen erstellen
// Define your own cron: arbitrary fields are allowed and last field can be optional
CronDefinition cronDefinition =
CronDefinitionBuilder.defineCron()
.withSeconds().and()
.withMinutes().and()
.withHours().and()
.withDayOfMonth()
.supportsHash().supportsL().supportsW().and()
.withMonth().and()
.withDayOfWeek()
.withIntMapping(7, 0) //we support non-standard non-zero-based numbers!
.supportsHash().supportsL().supportsW().and()
.withYear().optional().and()
.instance();
// or get a predefined instance
cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
Einen Cron-Ausdruck erstellen
// Create a cron expression. CronMigrator will ensure you remain cron provider agnostic
import static com.cronutils.model.field.expression.FieldExpressionFactory.*;
Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ))
.withYear(always())
.withDoM(between(SpecialChar.L, 3))
.withMonth(always())
.withDoW(questionMark())
.withHour(always())
.withMinute(always())
.withSecond(on(0))
.instance();
// Obtain the string expression
String cronAsString = cron.asString(); // 0 * * L-3 * ? *
Parsen
// Create a parser based on provided definition
CronParser parser = new CronParser(cronDefinition);
Cron quartzCron = parser.parse("0 23 * ? * 1-5 *");
... sogar Multi-Cron-Ausdrücke! Wie wäre es, mehrere Crons in eine einzige Zeile zu packen? Anstatt 0 0 9 * * ? *, 0 0 10 * * ? *, 0 30 11 * * ? * und 0 0 12 * * ? * zu schreiben, können wir es in 0 0|0|30|0 9|10|11|12 * * ? * zusammenfassen.
Beschreiben
// Create a descriptor for a specific Locale
CronDescriptor descriptor = CronDescriptor.instance(Locale.UK);
// Parse some expression and ask descriptor for description
String description = descriptor.describe(parser.parse("*/45 * * * * ?"));
// Description will be: "every 45 seconds"
description = descriptor.describe(quartzCron);
// Description will be: "every hour at minute 23 every day between Monday and Friday"
// which is the same description we get for the cron below:
descriptor.describe(parser.parse("0 23 * ? * MON-FRI *"));
Migrieren
// Migration between cron libraries has never been so easy!
// Turn cron expressions into another format by using CronMapper:
CronMapper cronMapper = CronMapper.fromQuartzToCron4j();
Cron cron4jCron = cronMapper.map(quartzCron);
// and to get a String representation of it, we can use
cron4jCron.asString();//will return: 23 * * * 1-5
Validieren
cron4jCron.validate()
Zeit von/bis zur Ausführung berechnen
// Get date for last execution
ZonedDateTime now = ZonedDateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * ? *"));
ZonedDateTime lastExecution = executionTime.lastExecution(now);
// Get date for next execution
ZonedDateTime nextExecution = executionTime.nextExecution(now);
// Time from last execution
Duration timeFromLastExecution = executionTime.timeFromLastExecution(now);
// Time to next execution
Duration timeToNextExecution = executionTime.timeToNextExecution(now);
Konstanten zwischen Bibliotheken abbilden
// Map day of week value from Quartz to JodaTime
int jodatimeDayOfWeek =
ConstantsMapper.weekDayMapping(
ConstantsMapper.QUARTZ_WEEK_DAY,
ConstantsMapper.JODATIME_WEEK_DAY
);
Datums- und Zeitformatierung für Menschen!
Verwenden Sie htime – menschenlesbare Datums-/Zeitformatierung für Java! Obwohl diese Funktionalität nicht im selben JAR enthalten ist, handelt es sich um ein cron-utils-Projekt, das Sie nützlich finden könnten.
// You no longer need to remember "YYYY-MM-dd KK a" patterns.
DateTimeFormatter formatter =
HDateTimeFormatBuilder
.getInstance()
.forJodaTime()
.getFormatter(Locale.US)
.forPattern("June 9, 2011");
String formattedDateTime = formatter.print(lastExecution);
// formattedDateTime will be lastExecution in "dayOfWeek, Month day, Year" format
cron-utils-CLI
Wir bieten eine einfache CLI-Schnittstelle, um cron-utils direkt von der Konsole aus zu verwenden, ohne ein neues Projekt schreiben zu müssen! Die CLI ist ein Satellitenprojekt, das unter cron-utils-cli verfügbar ist.
Verwendung: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'
Beispiel: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f UNIX -e '* 1 * * *'
Wenn Sie ein eigenständiges JAR möchten, ohne das 'cp' zu benötigen, erstellen Sie ein Uber-JAR mit:
mvn assembly:assembly -DdescriptorId=jar-with-dependencies
Starten Sie dann cli-utils (im Verzeichnis target erstellt) mit:
java -jar cron-utils-<version>-jar-with-dependencies.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'`
Mitwirken & Unterstützen!
Beiträge sind willkommen! Sie können mitwirken, indem Sie
Schauen Sie auf unserer Seite vorbei! Statistiken zum Projekt finden Sie in unserem OpenHUB-Profil.
Weitere cron-utils-Projekte
Sie sind eingeladen, die folgenden cron-utils-Projekte zu besuchen und zu verwenden: