您可以使用以下三种不同的启动方式提前安排自动化操作:
第一种启动方式 Time.ScheduledTimeEvent 可让您安排自动化操作在未来的某个精确时间点启动一次,或者根据时钟时间或太阳事件(即日出或日落)定期启动。
例如,此启动方式每天晚上 10: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 |
* |
| 在 2 月份 ,每小时运行一次,在每小时的 15 分运行 | 0 |
15 |
* |
? |
2 |
* |
* |
| 每小时运行一次 | 0 |
0 |
* |
? |
* |
* |
* |
| 从 1 月到 3 月,在最接近每月 1 日的星期几,每 24 小时运行一次,在午夜运行 | 0 |
0 |
0 |
? |
1-3 |
1W |
* |
| 在 2 月的第二个星期四,每小时运行一次,在每小时的 15 分运行 | 0 |
15 |
* |
? |
2 |
5#2 |
* |
| 在 2 月份的最后一天,每小时运行一次,在每小时的 15 分运行 | 0 |
15 |
* |
L |
2 |
? |
* |
| 每周二和周四上午 6:00 运行 | 0 |
30 |
19 |
? |
* |
3,5 |
* |
RecurringClockTimeScheduledEvent
在 RecurringClockTimeScheduledEvent 启动方式中,cron 表达式字符串会
分配给
Time.RecurringClockTimeScheduledEvent.cronExpression
字段。
以下示例是一种 RecurringClockTimeScheduledEvent 启动方式,可让自动化操作在 4 月份的每个星期三晚上 8:00 启动:
starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) { parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *")) }
RecurringSolarTimeScheduleEvent
RecurringSolarTimeScheduleEvent 启动方式接受两个参数:
SolarTimeStruct。cronExpression:cron表达式的子集,仅包含 日期、月份、星期几和年份字段。太阳时间决定了自动化操作的确切启动时间,因此省略了秒、分钟和小时字段。
以下示例是一种启动方式,可让自动化操作在 4 月份的每个星期三日出后一小时启动:
starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) { parameter( Time.RecurringSolarTimeScheduledEvent.solarTime( TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1)) ) ) parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *")) }