Вы можете запланировать автоматизацию заранее, используя три разных события:
Первый, 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
позволяет запланировать автоматизацию на основе одного или нескольких условий времени или даты.
В этом стартере используется синтаксис, похожий на тот, который применяется в утилите Unix cron
для указания расписания повторяющихся автоматизированных задач.
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 |
* |
| Выполнять в 15 минут каждого часа в течение февраля | 0 |
15 |
* |
? |
2 |
* |
* |
| Выполнять один раз в час | 0 |
0 |
* |
? |
* |
* |
* |
| Выполнять каждые 24 часа в полночь с января по март в ближайший будний день к первому числу месяца. | 0 |
0 |
0 |
? |
1-3 |
1W |
* |
| Во второй четверг февраля, каждый час, в 15 минут | 0 |
15 |
* |
? |
2 |
5#2 |
* |
| Выполнять в 15 минут каждого часа в последний день февраля | 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 принимает два параметра:
SolarTimeStructcronExpression– подмножество выраженияcron, состоящее только из полей "День месяца", "Месяц", "День недели" и "Год". Солнечное время определяет точное время запуска автоматизации, поэтому поля "Секунда", "Минута" и "Час" опущены.
В следующем примере показано условие запуска, при котором автоматизация будет запускаться каждый час после восхода солнца каждую среду апреля:
starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) { parameter( Time.RecurringSolarTimeScheduledEvent.solarTime( TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1)) ) ) parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *")) }