Cykliczny zaplanowany początek zdarzenia

Możesz zaplanować automatyzację z wyprzedzeniem, korzystając z 3 różnych elementów uruchamiających:

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

Pierwszy, Time.ScheduledTimeEvent, umożliwia zaplanowanie automatyzacji, która rozpocznie się w jednym konkretnym momencie w przyszłości lub będzie powtarzana cyklicznie na podstawie godziny lub zdarzenia słonecznego (czyli wschodu lub zachodu słońca).

Na przykład ten element uruchamia automatyzację codziennie o 22:00:

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

Możesz też określić zdarzenie czasu słonecznego zamiast czasu zegarowego. Parametr dla tego typu elementu uruchamiającego to SolarTimeStruct, który składa się z:

  1. type, czyli SolarTimeType.Sunrise lub SolarTimeType.Sunset.
  2. offset, który 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 aktywator uruchamia się przed zdarzeniem słonecznym.

Poniższy przykład to element inicjujący, który codziennie uruchamia automatyzację 15 minut przed wschodem słońca:

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

Kolejne 2 elementy początkowe to elementy początkowe cyklicznych zaplanowanych zdarzeń, które umożliwiają tworzenie automatyzacji uruchamianych okresowo zgodnie z bardziej szczegółowymi kryteriami, które mogą obejmować warunki związane z czasem i kalendarzem.

Time.RecurringClockTimeScheduledEvent umożliwia zaplanowanie automatyzacji na podstawie co najmniej jednego warunku dotyczącego godziny lub daty. Ten starter używa składni podobnej do tej, której używa narzędzie cron w systemie Unix, aby określić harmonogram automatyzacji cyklicznej.

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

Wyrażenia: cron

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

Wyzwalacze cyklicznych zaplanowanych zdarzeń używają składni wyrażeń planowania, która jest podobna do składni używanej przez cron. Z tego powodu wyrażenia planowania używane z tymi wyzwalaczami są nazywane wyrażeniami cron.

Istnieje kilka różnych „odmian” cron i kilka odmian składni w tych implementacjach. Wyrażenia cyklicznego zaplanowanego zdarzenia inicjującego cron używają tej samej składni co harmonogram Quartz. Składnia wyrażeń Quartz cron jest wyjaśniona w dokumentacji Quartz CronExpression.

Przykłady

Oto kilka przykładów.

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

RecurringClockTimeScheduledEvent

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

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

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

RecurringSolarTimeScheduleEvent

Funkcja inicjująca RecurringSolarTimeScheduleEvent przyjmuje 2 parametry:

  1. SolarTimeStruct.
  2. cronExpression: podzbiór wyrażenia cron składający się tylko z pól Day-of-Month, Month, Day-of-Week i Year. Czas słoneczny określa dokładny czas rozpoczęcia automatyzacji, dlatego pola Sekunda, Minuta i Godzina są pomijane.

Poniższy 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 *"))
}