Три различных стартера позволяют вам заранее запланировать автоматизацию:
Первый, 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 . Синтаксис выражений 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
принимает два параметра:
-
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 *")) }