شروع رویدادهای برنامه ریزی شده تکراری

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

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

Time.RecurringSolarTimeScheduledEvent به شما امکان می‌دهد یک اتوماسیون را بر اساس زمان طلوع یا غروب خورشید، و به صورت اختیاری در ترکیب با یک شرط مبتنی بر تقویم، برنامه‌ریزی کنید.

عبارات cron

ممکن است از قبل با cron آشنا باشید، دستوری که در سیستم‌های یونیکس و لینوکس برای زمان‌بندی کارهای تکراری استفاده می‌شود.

شروع‌کننده‌های رویدادهای زمان‌بندی‌شده‌ی تکرارشونده از یک سینتکس عبارت زمان‌بندی استفاده می‌کنند که مشابه سینتکس مورد استفاده توسط cron است و به همین دلیل، عبارات زمان‌بندی مورد استفاده با این شروع‌کننده‌ها ، عبارات cron نامیده می‌شوند.

چندین نوع مختلف cron و چندین نوع سینتکس در این پیاده‌سازی‌ها وجود دارد. عبارات cron شروع‌کننده رویدادهای زمان‌بندی‌شده‌ی تکرارشونده از همان سینتکس زمان‌بندی‌کننده‌ی Quartz استفاده می‌کنند. سینتکس عبارات cron کوارتز در مستندات 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 *"))
}