Стартеры повторяющихся запланированных мероприятий

Три различных стартера позволяют вам заранее запланировать автоматизацию:

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

Первый, Time.ScheduledTimeEvent , позволяет вам запланировать запуск автоматизации либо в определенный конкретный момент в будущем, либо на повторяющейся основе на основе времени по часам или солнечного события (то есть восхода или захода солнца).

Например, этот стартер запускает автоматизацию в 22:00 каждый день:

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

В качестве альтернативы можно указать событие солнечного времени вместо времени по часам. Параметром для этого типа стартера является SolarTimeStruct , состоящий из:

  1. type , который может быть либо SolarTimeType.Sunrise , либо SolarTimeType.Sunset .
  2. offset , которое позволяет сместить время начала относительно солнечного события на любой промежуток времени. Положительные значения вводят задержку после солнечного события, а отрицательные значения заставляют стартера срабатывать до солнечного события.

Следующий пример представляет собой стартер, который запускает автоматику за 15 минут до восхода солнца каждый день:

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

Вторые два запускателя представляют собой повторяющиеся запланированные запуски событий , которые позволяют создавать автоматизации, запускаемые периодически в соответствии с более конкретными критериями, которые могут включать как временные, так и календарные условия.

Time.RecurringClockTimeScheduledEvent позволяет планировать автоматизацию на основе одного или нескольких условий времени или даты. Этот метод запуска использует синтаксис, аналогичный синтаксису утилиты cron в Unix для задания расписания повторяющейся автоматизации.

Time.RecurringSolarTimeScheduledEvent позволяет планировать автоматизацию на основе времени восхода или захода солнца, при необходимости в сочетании с календарным условием.

выражения cron

Возможно, вы уже знакомы с cron — командой, используемой в системах Unix и Linux для планирования повторяющихся заданий.

Повторяющиеся запланированные стартеры событий используют синтаксис выражений планирования, аналогичный синтаксису, используемому cron , и по этой причине выражения планирования, используемые с этими стартерами, называются выражениями cron .

Существует несколько различных «разновидностей» cron и несколько вариантов синтаксиса в этих реализациях. Выражения cron для запуска повторяющихся запланированных событий используют тот же синтаксис, что и планировщик Quartz . Синтаксис выражений cron Quartz описан в документации по CronExpression Quartz .

Примеры

Вот несколько примеров для иллюстрации.

Вариант использования Второй Минута Час День месяца Месяц День недели Год
Запускать каждые 24 часа в полночь. 0 0 0 ? * * *
Запуск в 6:00 утра каждый вторник 0 30 19 ? * 3 *
Запускаться в четверть часа, каждый час, в течение февраля. 0 15 * ? 2 * *
Запускать раз в час 0 0 * ? * * *
Запускается каждые 24 часа, в полночь, с января по март, в будний день, ближайший к 1-му числу месяца. 0 0 0 ? 1-3 1W *
Во второй четверг февраля, один раз в час, в четверть третьего 0 15 * ? 2 5#2 *
Запускается в четверть часа, каждый час, в последний день февраля. 0 15 * L 2 ? *
Запуск в 6:00 утра каждый вторник и четверг. 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

В пускателе RecurringClockTimeScheduledEvent строка выражения cron назначается полю Time.RecurringClockTimeScheduledEvent.cronExpression .

Ниже приведен пример стартера RecurringClockTimeScheduledEvent , который запускает автоматизацию в 20:00 каждую среду апреля:

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

RecurringSolarTimeScheduleEvent

Стартер RecurringSolarTimeScheduleEvent принимает два параметра:

  1. SolarTimeStruct .
  2. cronExpression : подмножество cron выражения, состоящее только из полей «День месяца», «Месяц», «День недели» и «Год». Солнечное время определяет точное время запуска автоматизации, поэтому поля «Секунда», «Минута» и «Час» опускаются.

В следующем примере показан стартер, который запускает автоматику через час после восхода солнца каждую среду апреля:

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