Auslöser für wiederkehrende geplante Ereignisse

Es gibt drei verschiedene Auslöser, mit denen du eine Automatisierung im Voraus planen kannst:

  1. Time.ScheduledTimeEvent
  2. Time.RecurringClockTimeScheduledEvent
  3. Time.RecurringSolarTimeScheduledEvent

Mit dem ersten, Time.ScheduledTimeEvent, kannst du eine Automatisierung so planen, dass sie entweder zu einem bestimmten Zeitpunkt in der Zukunft oder wiederkehrend gestartet wird, basierend auf der Uhrzeit oder einem Sonnenereignis (Sonnenaufgang oder Sonnenuntergang).

Mit diesem Auslöser wird die Automatisierung beispielsweise jeden Tag um 22:00 Uhr gestartet:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0)))
}

Alternativ kannst du ein Sonnenzeitereignis anstelle der Uhrzeit angeben. Der Parameter für diese Art von Auslöser ist ein SolarTimeStruct, der aus Folgendem besteht:

  1. type, entweder SolarTimeType.Sunrise oder SolarTimeType.Sunset.
  2. offset, mit dem du die Startzeit relativ zum Sonnenereignis um eine beliebige Zeitspanne verschieben kannst. Positive Werte führen zu einer Verzögerung nach dem Sonnenereignis und negative Werte dazu, dass der Auslöser vor dem Sonnenereignis ausgelöst wird.

Das folgende Beispiel ist ein Auslöser, der die Automatisierung jeden Tag 15 Minuten vor Sonnenaufgang startet:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(
    Time.ScheduledTimeEvent.solarTime(
      SolarTimeStruct(SolarTimeType.Sunrise, java.time.Duration.ofMinutes(-15))
    )
  )
}

Die anderen beiden Auslöser sind Auslöser für wiederkehrende geplante Ereignisse. Mit ihnen kannst du Automatisierungen erstellen, die regelmäßig nach bestimmten Kriterien ausgeführt werden, die sowohl zeit- als auch kalenderbasierte Bedingungen enthalten können.

Mit Time.RecurringClockTimeScheduledEvent kannst du eine Automatisierung basierend auf einer oder mehreren Zeit- oder Datumsbedingungen planen. Dieser Auslöser verwendet eine Syntax, die der des Unix-Dienstprogramms cron ähnelt, um den Zeitplan für eine wiederkehrende Automatisierung anzugeben.

Mit Time.RecurringSolarTimeScheduledEvent kannst du eine Automatisierung basierend auf der Sonnenaufgangs- oder Sonnenuntergangszeit planen, optional in Kombination mit einer kalenderbasierten Bedingung.

cron Ausdrücke

Vielleicht kennen Sie bereits cron, einen Befehl, der auf Unix- und Linux-Systemen verwendet wird, um wiederkehrende Jobs zu planen.

Für wiederkehrende geplante Ereignisstarter wird eine Syntax für Planungsausdrücke verwendet, die der von cron ähnelt. Aus diesem Grund werden die mit diesen Startern verwendeten Planungsausdrücke als cron-Ausdrücke bezeichnet.

Es gibt verschiedene „Varianten“ von cron und mehrere Syntaxvarianten in diesen Implementierungen. Ausdrücke für wiederkehrende geplante Ereignisstarter cron verwenden dieselbe Syntax wie der Quartz-Planer. Die Syntax für Quartz-cron-Ausdrücke wird in der Dokumentation für CronExpression von Quartz erläutert.

Beispiele

Hier einige Beispiele:

Anwendungsfall Sekunde Minute Stunde Tag des Monats Monat Wochentag Jahr
Alle 24 Stunden um Mitternacht ausführen 0 0 0 ? * * *
Jeden Dienstag um 6:00 Uhr ausführen 0 30 19 ? * 3 *
Im Februar jede Stunde um Viertel nach ausführen 0 15 * ? 2 * *
Einmal pro Stunde ausführen 0 0 * ? * * *
Alle 24 Stunden um Mitternacht von Januar bis März am Wochentag, der dem 1. des Monats am nächsten ist 0 0 0 ? 1-3 1W *
Am zweiten Donnerstag im Februar, einmal pro Stunde, um Viertel nach 0 15 * ? 2 5#2 *
Am letzten Tag des Monats Februar jede Stunde um Viertel nach ausführen 0 15 * L 2 ? *
Jeden Dienstag und Donnerstag um 6:00 Uhr ausführen 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

In einem RecurringClockTimeScheduledEvent-Auslöser wird der Ausdrucksstring cron dem Feld Time.RecurringClockTimeScheduledEvent.cronExpression zugewiesen.

Hier ist ein Beispiel für einen RecurringClockTimeScheduledEvent-Auslöser, der die Automatisierung jeden Mittwoch im April um 20:00 Uhr startet:

starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) {
  parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *"))
}

RecurringSolarTimeScheduleEvent

Der Auslöser RecurringSolarTimeScheduleEvent hat zwei Parameter:

  1. Ein SolarTimeStruct.
  2. cronExpression: Eine Teilmenge eines cron-Ausdrucks, die nur die Felder „Tag des Monats“, „Monat“, „Wochentag“ und „Jahr“ enthält. Die Sonnenzeit bestimmt die genaue Zeit, zu der die Automatisierung gestartet wird. Daher werden die Felder „Sekunde“, „Minute“ und „Stunde“ weggelassen.

Das folgende Beispiel ist ein Auslöser, der eine Automatisierung jeden Mittwoch im April eine Stunde nach Sonnenaufgang startet:

starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) {
  parameter(
    Time.RecurringSolarTimeScheduledEvent.solarTime(
      TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1))
    )
  )
  parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *"))
}