آغازگرهای رویداد زمان‌بندی‌شده تکرارشونده

سه آغازگر مختلف به شما امکان می‌دهد خودکارسازی را ازقبل زمان‌بندی کنید:

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

اولی، Time.ScheduledTimeEvent، به شما امکان می‌دهد زمان‌بندی کنید که خودکارسازی در یک لحظه دقیق در آینده یا به‌صورت تکرارشونده، براساس زمان ساعت یا رویداد خورشیدی (یعنی طلوع یا غروب آفتاب) شروع شود.

برای مثال، این آغازگر خودکارسازی را هر روز ساعت ۱۰:۰۰ شب شروع می‌کند:

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

به‌جای زمان ساعت، می‌توانید رویداد زمان خورشیدی را مشخص کنید. پارامتر برای این نوع آغازگر عبارت است از SolarTimeStruct که شامل موارد زیر است:

  1. type، که یا SolarTimeType.Sunrise یا SolarTimeType.Sunset است.
  2. offset، که به شما امکان می‌دهد زمان شروع را نسبت به رویداد خورشیدی به هر میزان زمانی تغییر دهید. مقادیر مثبت تأخیری را پس‌از رویداد خورشیدی ایجاد می‌کنند، و مقادیر منفی باعث می‌شوند آغازگر پیش‌از رویداد خورشیدی فعال شود.

مثال زیر آغازگری است که خودکارسازی را ۱۵ دقیقه قبل‌از طلوع آفتاب هر روز شروع می‌کند:

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 توضیح داده شده است.

مثال‌ها

در اینجا چند مثال برای توضیح آورده شده است.

کاربرد ثانیه دقیقه ساعت روز از ماه ماه روز هفته سال
هر ۲۴ ساعت، در نیمه‌شب اجرا شود 0 0 0 ? * * *
هر سه‌شنبه ساعت ۶:۰۰ صبح اجرا شود 0 30 19 ? * 3 *
در ماه فوریه، هر ساعت یک ربع گذشته از ساعت اجرا شود 0 15 * ? 2 * *
یک‌بار در ساعت اجرا شود 0 0 * ? * * *
هر ۲۴ ساعت، در نیمه‌شب، از ژانویه تا مارس، در نزدیک‌ترین روز هفته به اول ماه اجرا شود 0 0 0 ? 1-3 1W *
دومین پنجشنبه فوریه، هر ساعت یک‌بار، یک ربع گذشته از ساعت 0 15 * ? 2 5#2 *
در آخرین روز ماه فوریه، هر ساعت، یک ربع بعداز ساعت اجرا شود 0 15 * L 2 ? *
هر سه‌شنبه و پنجشنبه ساعت ۶:۰۰ صبح اجرا شود 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

در آغازگر RecurringClockTimeScheduledEvent، رشته عبارت cron به فیلد Time.RecurringClockTimeScheduledEvent.cronExpression اختصاص داده می‌شود.

در زیر نمونه‌ای از آغازگر RecurringClockTimeScheduledEvent ارائه شده است که خودکارسازی را در ساعت ۸:۰۰ بعدازظهر، هر چهارشنبه در ماه آوریل شروع می‌کند:

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

RecurringSolarTimeScheduleEvent

آغازگر RecurringSolarTimeScheduleEvent دو پارامتر می‌گیرد:

  1. ‫SolarTimeStruct.
  2. cronExpression: زیرمجموعه‌ای از عبارت cron که فقط شامل فیلدهای «روز ماه»، «ماه»، «روز هفته»، و «سال» است. زمان خورشیدی زمان دقیق شروع خودکارسازی را تعیین می‌کند، بنابراین فیلدهای «ثانیه»، «دقیقه»، و «ساعت» حذف می‌شوند.

مثال زیر آغازگری است که باعث می‌شود خودکارسازی یک ساعت بعداز طلوع آفتاب، هر چهارشنبه در ماه آوریل شروع شود:

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