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

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

  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 به شما امکان می‌دهد خودکارسازی را براساس یک یا چند وضعیت زمان یا تاریخ زمان‌بندی کنید. این شروع‌کننده از دستورزبانی استفاده می‌کند که شبیه به دستورزبانی است که ابزار cron Unix برای مشخص کردن زمان‌بندی خودکارسازی تکرارشونده استفاده می‌کند.

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 *"))
}