Trình kích hoạt sự kiện định kỳ theo lịch

Có 3 điều kiện khởi động để bạn lên lịch trước cho một quy trình tự động hoá:

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

Điều kiện đầu tiên, Time.ScheduledTimeEvent, cho phép bạn lên lịch để một quy trình tự động hoá bắt đầu tại một thời điểm chính xác duy nhất trong tương lai hoặc theo định kỳ, dựa trên thời gian thực hoặc một sự kiện liên quan đến mặt trời (tức là bình minh hoặc hoàng hôn).

Ví dụ: điều kiện khởi động này sẽ bắt đầu quy trình tự động hoá vào lúc 22:00 mỗi ngày:

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

Ngoài ra, bạn có thể chỉ định sự kiện theo giờ mặt trời thay vì giờ trên đồng hồ. Tham số cho loại thành phần khởi động này là SolarTimeStruct bao gồm:

  1. type, có thể là SolarTimeType.Sunrise hoặc SolarTimeType.Sunset.
  2. offset, cho phép bạn điều chỉnh thời gian bắt đầu so với sự kiện mặt trời theo bất kỳ khoảng thời gian nào. Các giá trị dương sẽ gây ra độ trễ sau sự kiện năng lượng mặt trời và các giá trị âm sẽ khiến bộ khởi động kích hoạt trước sự kiện năng lượng mặt trời.

Ví dụ sau đây là một quy trình tự động hoá bắt đầu 15 phút trước khi mặt trời mọc mỗi ngày:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(
    Time.ScheduledTimeEvent.solarTime(
      SolarTimeStruct(SolarTimeType.Sunrise, java.time.Duration.ofMinutes(-15))
    )
  )
}

Hai trình kích hoạt thứ hai là trình kích hoạt sự kiện định kỳ theo lịch, cho phép bạn tạo các quy trình tự động hoá chạy định kỳ theo các tiêu chí cụ thể hơn, có thể bao gồm cả điều kiện dựa trên thời gian và lịch.

Time.RecurringClockTimeScheduledEvent cho phép bạn lên lịch cho một thao tác tự động dựa trên một hoặc nhiều điều kiện về thời gian hoặc ngày. Trình khởi chạy này sử dụng một cú pháp tương tự như cú pháp mà tiện ích cron của Unix dùng để chỉ định lịch biểu cho một quy trình tự động hoá định kỳ.

Time.RecurringSolarTimeScheduledEventcho phép bạn lên lịch tự động hoá dựa trên thời gian bình minh hoặc hoàng hôn, bạn cũng có thể kết hợp với một điều kiện dựa trên lịch.

cron biểu thức

Bạn có thể đã quen thuộc với cron, một lệnh được dùng trên các hệ thống Unix và Linux để lên lịch cho các công việc định kỳ.

Các trình khởi chạy sự kiện định kỳ theo lịch sử dụng một cú pháp biểu thức lập lịch tương tự như cú pháp mà cron sử dụng. Vì lý do này, các biểu thức lập lịch được dùng với các trình khởi chạy này được gọi là biểu thức cron.

Có nhiều "hương vị" khác nhau của cron và một số biến thể của cú pháp trong các cách triển khai này. Biểu thức cron của sự kiện kích hoạt theo lịch biểu định kỳ sử dụng cùng một cú pháp như trình lập lịch Quartz. Cú pháp biểu thức Quartz cron được giải thích trong tài liệu về CronExpression của Quartz.

Ví dụ

Sau đây là một vài ví dụ minh hoạ.

Trường hợp sử dụng Giây Phút Giờ Ngày trong tháng Tháng Ngày trong tuần Năm
Chạy mỗi 24 giờ, vào lúc nửa đêm 0 0 0 ? * * *
Chạy lúc 6:00 sáng thứ Ba hằng tuần 0 30 19 ? * 3 *
Chạy vào mỗi giờ, vào thời điểm 15 phút sau mỗi giờ, trong tháng 2 0 15 * ? 2 * *
Chạy một lần mỗi giờ 0 0 * ? * * *
Chạy mỗi 24 giờ, vào nửa đêm, từ tháng 1 đến tháng 3, vào ngày trong tuần gần nhất với ngày 1 của tháng 0 0 0 ? 1-3 1W *
Vào thứ Năm thứ hai của tháng Hai, mỗi giờ một lần, vào lúc 15 phút 0 15 * ? 2 5#2 *
Chạy vào mỗi giờ, vào ngày cuối cùng của tháng 2 0 15 * L 2 ? *
Chạy lúc 6:00 sáng thứ Ba và thứ Năm hằng tuần 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

Trong một chương trình khởi động RecurringClockTimeScheduledEvent, chuỗi biểu thức cron được chỉ định cho trường Time.RecurringClockTimeScheduledEvent.cronExpression.

Sau đây là ví dụ về một trình khởi chạy RecurringClockTimeScheduledEvent bắt đầu quy trình tự động hoá lúc 8:00 tối, vào thứ Tư hằng tuần trong tháng Tư:

starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) {
  parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *"))
}

RecurringSolarTimeScheduleEvent

Chương trình khởi động RecurringSolarTimeScheduleEvent nhận 2 tham số:

  1. Một SolarTimeStruct.
  2. cronExpression: Một tập hợp con của biểu thức cron chỉ bao gồm các trường Ngày trong tháng, Tháng, Ngày trong tuần và Năm. Thời gian mặt trời xác định thời gian chính xác mà quy trình tự động hoá sẽ bắt đầu, do đó, các trường Giây, Phút và Giờ sẽ bị bỏ qua.

Ví dụ sau đây là một điều kiện kích hoạt khiến một quy trình tự động hoá bắt đầu một giờ sau khi mặt trời mọc, vào mỗi thứ Tư trong tháng Tư:

starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) {
  parameter(
    Time.RecurringSolarTimeScheduledEvent.solarTime(
      TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1))
    )
  )
  parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *"))
}