إجراءات بدء الأحداث المتكرّرة والمجدوَلة

تتيح لك ثلاثة إجراءات تفعيل مختلفة جدولة عملية تلقائية مسبقًا:

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

يتيح لك الخيار الأول، Time.ScheduledTimeEvent، تحديد موعد لبدء عملية التشغيل الآلي في لحظة دقيقة واحدة في المستقبل، أو بشكل متكرر، استنادًا إلى وقت الساعة أو حدث شمسي (أي شروق الشمس أو غروبها).

على سبيل المثال، يبدأ إجراء التفعيل هذا عملية التشغيل الآلي في الساعة 10:00 مساءً كل يوم:

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

يمكنك بدلاً من ذلك تحديد حدث مرتبط بالوقت الشمسي بدلاً من وقت الساعة. المَعلمة الخاصة بهذا النوع من أدوات التفعيل هي SolarTimeStruct وتتألف من:

  1. type، وهو إما SolarTimeType.Sunrise أو SolarTimeType.Sunset.
  2. offset، الذي يتيح لك تغيير وقت البدء بالنسبة إلى الحدث الشمسي بأي مقدار من الوقت. تؤدي القيم الموجبة إلى حدوث تأخير بعد الحدث الشمسي، وتؤدي القيم السالبة إلى تشغيل جهاز بدء التشغيل قبل الحدث الشمسي.

المثال التالي هو برنامج بدء يشغّل عملية التشغيل الآلي قبل 15 دقيقة من شروق الشمس كل يوم:

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 في مستندات QuartzCronExpression.

أمثلة

في ما يلي بعض الأمثلة لتوضيح ذلك.

حالة الاستخدام ثانية واحدة دقيقة ساعة اليوم من الشهر الشهر اليوم من الأسبوع سنة
يتم تشغيلها كل 24 ساعة عند منتصف الليل 0 0 0 ? * * *
التشغيل في الساعة 6:00 صباحًا كل ثلاثاء 0 30 19 ? * 3 *
التشغيل كل ساعة عند مرور ربع ساعة على رأس الساعة خلال شهر فبراير 0 15 * ? 2 * *
التشغيل مرة واحدة في الساعة 0 0 * ? * * *
يتم تشغيلها كل 24 ساعة، عند منتصف الليل، من يناير إلى مارس، في يوم الأسبوع الأقرب إلى اليوم الأول من الشهر 0 0 0 ? 1-3 1W *
في ثاني خميس من شهر فبراير، مرة واحدة كل ساعة، في الساعة 15 دقيقة 0 15 * ? 2 5#2 *
التشغيل كل ساعة في ربع الساعة، في آخر يوم من شهر فبراير 0 15 * L 2 ? *
التشغيل في الساعة 6:00 صباحًا كل يوم ثلاثاء وخميس 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

في RecurringClockTimeScheduledEvent starter، يتم تعيين سلسلة التعبير cron إلى الحقل Time.RecurringClockTimeScheduledEvent.cronExpression.

في ما يلي مثال على RecurringClockTimeScheduledEvent مشغّل يبدأ عملية التشغيل الآلي في الساعة 8:00 مساءً، كل أربعاء من شهر أبريل:

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