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

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

  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 جدولة عملية تشغيل آلي استنادًا إلى شرط واحد أو أكثر من شروط الوقت أو التاريخ. يستخدم هذا المشغّل بنية مشابهة لتلك التي تستخدمها أداة cron في نظام Unix لتحديد الجدول الزمني لعملية تشغيل آلي متكررة.

يتيح لك Time.RecurringSolarTimeScheduledEvent جدولة عملية تشغيل آلي استنادًا إلى وقت شروق الشمس أو غروبها، ويمكنك أيضًا إضافة شرط مستند إلى التقويم.

‫cron تعبير

قد تكون على دراية بـ cron، وهو أمر يُستخدم في أنظمة Unix وLinux لجدولة المهام المتكررة.

تستخدم عوامل تشغيل الأحداث المجدوَلة المتكررة بنية تعبير جدولة مشابهة لتلك التي يستخدمها cron، ولهذا السبب، يُشار إلى تعبيرات الجدولة المستخدمة مع عوامل التشغيل هذه باسم تعبيرات cron.

هناك عدة "أنواع" مختلفة من cron، والعديد من الاختلافات في بناء الجملة عبر هذه التطبيقات. تستخدم تعبيرات cron الخاصة ببدء الأحداث المجدوَلة المتكررة البنية نفسها التي يستخدمها مجدوِل Quartz. يتم شرح بنية تعبير Quartz cron في مستندات Quartz CronExpression.

أمثلة

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

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

RecurringClockTimeScheduledEvent

في مشغّل RecurringClockTimeScheduledEvent، يتم تخصيص سلسلة تعبير 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 *"))
}