Cykliczny zaplanowany początek zdarzenia

Dostępne są 3 elementy uruchamiające, które umożliwiają zaplanowanie automatyzacji z wyprzedzeniem:

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

Pierwszy z nich, Time.ScheduledTimeEvent, umożliwia zaplanowanie automatyzacji, która ma się rozpocząć w jednym, precyzyjnie określonym momencie w przyszłości lub cyklicznie, na podstawie czasu zegarowego albo zdarzenia związanego ze słońcem (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ć wydarzenie związane z czasem słonecznym. Parametr tego typu startera to SolarTimeStruct składający się z:

  1. type, czyli SolarTimeType.Sunrise lub SolarTimeType.Sunset.
  2. offset, która umożliwia przesunięcie godziny rozpoczęcia względem wydarzenia słonecznego o dowolną ilość czasu. Wartości dodatnie wprowadzają opóźnienie po zdarzeniu słonecznym, a wartości ujemne powodują uruchomienie startera przed zdarzeniem słonecznym.

Ten przykład to szablon, który uruchamia automatyzację 15 minut przed wschodem słońca każdego dnia:

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

Dwa kolejne startery to cykliczne startery zaplanowanych zdarzeń, 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 związanego z czasem lub datą. Ten starter używa składni podobnej do tej, której używa narzędzie Unix cron do określania harmonogramu powtarzającej się automatyzacji.

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

cron wyrażeń

Możesz już znać polecenie cron, które jest używane w systemach Unix i Linux do planowania powtarzających się zadań.

Elementy wywołujące cykliczne zaplanowane wydarzenia korzystają z składni wyrażeń harmonogramu podobnej do tej, która jest używana przez cron. Z tego powodu wyrażenia harmonogramu używane z tymi elementami wywołującymi są nazywane cron.

Istnieje kilka „odmian” cron i kilka wariantów składni w ramach tych implementacji. Wyrażenia inicjujące cykliczne zaplanowane zdarzenie cron używają tej samej składni co harmonogram Quartz. Składnia wyrażeń Quartz cron jest wyjaśniona w dokumentacji 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 kwadrans po pełnej godzinie w lutym. 0 15 * ? 2 * *
Uruchamiaj raz na godzinę 0 0 * ? * * *
Uruchamianie co 24 godziny o północy od stycznia do marca w dzień powszedni najbliższy 1 dnia miesiąca 0 0 0 ? 1-3 1W *
W drugi czwartek lutego, co godzinę, o kwadrans po 0 15 * ? 2 5#2 *
Uruchamiaj co godzinę o kwadrans po pełnej godzinie w ostatnim dniu lutego 0 15 * L 2 ? *
Biegaj o 6:00 w każdy wtorek i czwartek 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

RecurringClockTimeScheduledEvent starterze ciąg wyrażenia cron jest przypisywany do pola Time.RecurringClockTimeScheduledEvent.cronExpression.

Oto przykład RecurringClockTimeScheduledEvent, który rozpoczyna automatyzację o 20:00 w każdą środę kwietnia:

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

RecurringSolarTimeScheduleEvent

Funkcja RecurringSolarTimeScheduleEvent starter przyjmuje 2 parametry:

  1. A 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ładną godzinę 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ę kwietnia:

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