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

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

  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 . Синтаксис выражения Quartz cron описан в документации Quartz CronExpression .

Примеры

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

Вариант использования Второй минута Час День месяца Месяц День недели Год
Запуск каждые 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 *"))
}