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

Có 3 trình khởi động khác nhau cho phép bạn lên lịch tự động hoá trước:

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

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

Ví dụ: trình chạy này bắt đầu quá trình tự động hoá 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ờ đồng hồ. Tham số cho loại trình khởi động này là một SolarTimeStruct bao gồm:

  1. type, là SolarTimeType.Sunrise hoặc SolarTimeType.Sunset.
  2. offset, cho phép bạn thay đổi 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. Giá trị dương sẽ tạo độ trễ sau sự kiện mặt trời, còn giá trị âm sẽ khiến bộ khởi động kích hoạt trước sự kiện mặt trời.

Ví dụ sau đây là một trình khởi động bắt đầu quá trình tự động hoá 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 khởi động thứ hai là trình khởi động sự kiện định kỳ theo lịch, cho phép bạn tạo các quy trình tự động 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 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 động này sử dụng cú pháp tương tự như cú pháp mà tiện ích cron của Unix sử dụng để chỉ định lịch biểu cho một quy trình tự động hoá định kỳ.

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

Biểu thức cron

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

Trình bắt đầu sự kiện định kỳ theo lịch sử dụng cú pháp biểu thức lên 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ên lịch được sử dụng với các trình bắt đầu này được gọi là biểu thức cron.

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

Ví dụ

Sau đây là một số 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 vào lúc 6:00 sáng thứ Ba hằng tuần 0 30 19 ? * 3 *
Chạy vào lúc 15 phút 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 lúc 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 2, mỗi giờ một lần, vào lúc 15 phút 0 15 * ? 2 5#2 *
Chạy vào lúc 15 phút mỗi giờ, vào ngày cuối cùng của tháng 2 0 15 * L 2 ? *
Chạy vào lúc 6:00 sáng mỗi thứ Ba và thứ Năm 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

Trong trình khởi động RecurringClockTimeScheduledEvent, chuỗi biểu thức cron được gán cho trường Time.RecurringClockTimeScheduledEvent.cronExpression.

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

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

RecurringSolarTimeScheduleEvent

Trình khởi động RecurringSolarTimeScheduleEvent có hai 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à quá 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 trình khởi động khiến một quy trình tự động bắt đầu một giờ sau khi mặt trời mọc, vào thứ Tư hằng tuần trong tháng 4:

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