您可以使用以下三种不同的启动方式提前安排自动化操作:
第一个是 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 日最近的工作日运行 | 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 *")) }