Три разных пускателя позволяют заранее запланировать автоматизацию:
Первый, Time.ScheduledTimeEvent
, позволяет запланировать запуск автоматизации либо в один конкретный момент в будущем, либо на повторяющейся основе, на основе времени часов или солнечного события (то есть восхода или заката).
Например, этот стартер запускает автоматизацию каждый день в 22:00:
starter<_>(structure, Time.ScheduledTimeEvent) { parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0))) }
Альтернативно, вы можете указать событие солнечного времени вместо времени по часам. Параметром для этого типа стартера является SolarTimeStruct
, состоящий из:
-
type
, который имеет значениеSolarTimeType.Sunrise
илиSolarTimeType.Sunset
. -
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
принимает два параметра:
-
SolarTimeStruct
. -
cronExpression
: подмножество выраженияcron
, состоящее только из полей «День месяца», «Месяц», «День недели» и «Год». Солнечное время определяет точное время запуска автоматизации, поэтому поля «Секунды», «Минуты» и «Часы» опускаются.
В следующем примере показан запуск системы автоматизации через час после восхода солнца каждую среду апреля:
starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) { parameter( Time.RecurringSolarTimeScheduledEvent.solarTime( TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1)) ) ) parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *")) }