周期性安排的事件启动器

您可以通过三种不同的启动方式提前安排自动化操作:

  1. Time.ScheduledTimeEvent
  2. Time.RecurringClockTimeScheduledEvent
  3. Time.RecurringSolarTimeScheduledEvent

第一种是 Time.ScheduledTimeEvent,可让您根据时钟时间或太阳事件(即日出或日落),将自动化操作安排在未来某个精确时刻启动,或定期启动。

例如,以下启动方式会在每天晚上 10:00 启动自动化操作:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0)))
}

或者,您也可以指定太阳时事件,而不是时钟时间。此类启动器的参数是一个 SolarTimeStruct,由以下部分组成:

  1. type,即 SolarTimeType.Sunrise 或 SolarTimeType.Sunset。
  2. 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 的 CronExpression 文档中介绍了 Quartz cron 表达式语法。

示例

以下是几个示例。

使用场景 第二步 分钟 小时 日期 月 星期几 年
每 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 月的最后一天,每小时过一刻钟运行一次 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 启动器接受两个参数:

  1. SolarTimeStruct。
  2. 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 *"))
}