Запланировать автоматизацию заранее можно с помощью трех разных условий:
Первый, 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 описан в документации по CronExpression Quartz.
Примеры
Вот несколько примеров.
| Пример использования | секунда | минута | Час | День месяца | Месяц | День недели | Год |
|---|---|---|---|---|---|---|---|
| Запускать каждые 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 |
? |
* |
| Запускать в 06: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, состоящее только из полей "День месяца", "Месяц", "День недели" и "Год". Солнечное время определяет точное время запуска автоматизации, поэтому поля Second, Minute и Hour опускаются.
В примере ниже показано условие, которое запускает автоматизацию через час после восхода солнца по средам в апреле.
starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) { parameter( Time.RecurringSolarTimeScheduledEvent.solarTime( TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1)) ) ) parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *")) }