Cykliczny zaplanowany początek zdarzenia

3 różne polecenia inicjujące pozwalają z wyprzedzeniem zaplanować automatyzację:

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

Pierwsze polecenie inicjujące, Time.ScheduledTimeEvent, umożliwia zaplanowanie automatyzacji, która ma się rozpocząć w określonym momencie w przyszłości lub cyklicznie na podstawie czasu zegarowego albo zdarzenia słonecznego (czyli wschodu lub zachodu słońca).

Na przykład to polecenie inicjujące uruchamia automatyzację codziennie o 22:00:

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

Zamiast czasu zegarowego możesz też określić zdarzenie słoneczne. Parametrem tego typu polecenia inicjującego jest SolarTimeStruct który składa się z tych pól:

  1. type, które może mieć wartość SolarTimeType.Sunrise lub SolarTimeType.Sunset.
  2. offset, które pozwala przesunąć czas rozpoczęcia względem zdarzenia słonecznego o dowolną ilość czasu. Wartości dodatnie wprowadzają opóźnienie po zdarzeniu słonecznym, a wartości ujemne powodują, że polecenie inicjujące uruchamia się przed zdarzeniem słonecznym.

Ten przykład to polecenie inicjujące, które uruchamia automatyzację codziennie 15 minut przed wschodem słońca:

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

Dwa kolejne polecenia inicjujące to polecenia inicjujące cykliczne zaplanowane zdarzenia, które umożliwiają tworzenie automatyzacji uruchamianych okresowo zgodnie z bardziej szczegółowymi kryteriami , które mogą obejmować warunki oparte na czasie i kalendarzu.

Time.RecurringClockTimeScheduledEvent umożliwia zaplanowanie automatyzacji na podstawie co najmniej 1 warunku czasu lub daty. To polecenie inicjujące używa składni podobnej do tej, której używa narzędzie cron w systemie Unix, aby określić harmonogram cyklicznej automatyzacji.

Time.RecurringSolarTimeScheduledEvent umożliwia zaplanowanie automatyzacji na podstawie czasu wschodu lub zachodu słońca, opcjonalnie w połączeniu z warunkiem opartym na kalendarzu.

Wyrażenia cron

Być może znasz już cron, czyli polecenie używane w systemach Unix i Linux do planowania cyklicznych zadań.

Polecenia inicjujące cykliczne zaplanowane zdarzenia używają składni wyrażenia harmonogramu podobnej do tej, której używa cron. Z tego powodu wyrażenia harmonogramu używane z tymi poleceniami inicjującymi są nazywane wyrażeniami cron.

Istnieje kilka różnych „odmian” cron i kilka wariantów składni w tych implementacjach. Wyrażenia polecenia inicjującego cykliczne zaplanowane zdarzenie cron używają tej samej składni co harmonogram Quartz. Składnia wyrażenia cron w Quartz jest opisana w dokumentacji w QuartzCronExpression.

Przykłady

Oto kilka przykładów:

Przypadek użycia Sekunda Minuta Godzina Dzień miesiąca Miesiąc Dzień tygodnia Rok
Uruchamiaj co 24 godziny o północy 0 0 0 ? * * *
Uruchamiaj o 6:00 w każdy wtorek 0 30 19 ? * 3 *
Uruchamiaj co godzinę o kwadransie po pełnej godzinie w lutym 0 15 * ? 2 * *
Uruchamiaj raz na godzinę 0 0 * ? * * *
Uruchamiaj co 24 godziny o północy od stycznia do marca w najbliższy dzień powszedni 1 dnia miesiąca 0 0 0 ? 1-3 1W *
W drugi czwartek lutego, raz na godzinę, o kwadransie po pełnej godzinie 0 15 * ? 2 5#2 *
Uruchamiaj co godzinę o kwadransie po pełnej godzinie w ostatni dzień lutego 0 15 * L 2 ? *
Uruchamiaj o 6:00 w każdy wtorek i czwartek 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

W poleceniu inicjującym RecurringClockTimeScheduledEvent ciąg wyrażenia cron jest przypisany do Time.RecurringClockTimeScheduledEvent.cronExpression pola.

Oto przykład polecenia inicjującego RecurringClockTimeScheduledEvent, które uruchamia automatyzację o 20:00 w każdą środę w kwietniu:

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

RecurringSolarTimeScheduleEvent

Polecenie inicjujące RecurringSolarTimeScheduleEvent przyjmuje 2 parametry:

  1. SolarTimeStruct.
  2. cronExpression: podzbiór wyrażenia cron składający się tylko z pól Dzień miesiąca, Miesiąc, Dzień tygodnia i Rok. Czas słoneczny określa dokładny czas rozpoczęcia automatyzacji, dlatego pola Sekunda, Minuta i Godzina są pomijane.

Ten przykład to polecenie inicjujące, które powoduje uruchomienie automatyzacji godzinę po wschodzie słońca w każdą środę w kwietniu:

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