مجدول مهام Java: Quartz Scheduler – دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مجدول مهام Java: Quartz Scheduler



في التطوير الحديث بلغة Java، غالبًا ما تنشأ الحاجة لتنفيذ الكود وفقًا لجدول زمني: إرسال النشرات البريدية، تنظيف ذاكرة التخزين المؤقت، إنشاء التقارير أو مزامنة البيانات. لهذه الأغراض، توجد مكتبة قوية Quartz Scheduler - وهي المعيار الفعلي لجدولة المهام في نظام Java البيئي.



Quartz Scheduler هو إطار عمل مفتوح المصدر يسمح بإنشاء وجدولة وإدارة المهام (Jobs) باستخدام نظام مرن من المشغلات. وهو يدعم كلاً من التأخيرات البسيطة وجداول cron المعقدة، وهو مقاوم للأعطال ويمكن دمجه مع Spring Boot وJakarta EE ومنصات أخرى.



الميزات الرئيسية

  • جدولة مرنة - دعم المشغلات البسيطة (SimpleTrigger) مع التأخير والتكرار، بالإضافة إلى مشغلات cron (CronTrigger) للجداول المعقدة.
  • الثبات - يمكن تخزين المهام والمشغلات في قاعدة بيانات (JDBC JobStore)، مما يضمن التنفيذ حتى بعد إعادة تشغيل التطبيق.
  • التجميع - إمكانية تشغيل عدة نسخ من المجدول مع التنسيق عبر قاعدة البيانات.
  • المستمعون - الاستماع لأحداث تنفيذ المهام (JobListener, TriggerListener) للتسجيل أو المعالجة الإضافية.
  • المراقبة - واجهة برمجة تطبيقات مدمجة لعرض المهام الحالية وحالتها وسجل التنفيذ.


التثبيت والإعداد

للبدء، أضف التبعية إلى ملف pom.xml الخاص بك (Maven):

<dependency>    <groupId>org.quartz-scheduler</groupId>    <artifactId>quartz</artifactId>    <version>2.3.2</version></dependency>

لـ Gradle:

implementation 'org.quartz-scheduler:quartz:2.3.2'


مثال لإنشاء مهمة بسيطة

لننشئ فئة تنفذ الواجهة Job. هذه هي مهمتنا:

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.LocalTime;

public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("تم تنفيذ المهمة في: " + LocalTime.now()); // هنا كود عملك }}


جدولة مهمة باستخدام SimpleTrigger

لنقم بتشغيل المهمة بعد 5 ثوانٍ ونكررها كل 10 ثوانٍ:

import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;

public class SimpleSchedulerExample { public static void main(String[] args) throws SchedulerException { // 1. إنشاء المجدول Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

// 2. تعريف المهمة (JobDetail) JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build();

// 3. إنشاء المشغل: بدء بعد 5 ثوانٍ، تكرار كل 10 ثوانٍ Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();

// 4. تعيين المهمة للمشغل وتشغيلها scheduler.scheduleJob(job, trigger); scheduler.start(); }}


استخدام CronTrigger للجداول المعقدة

تسمح تعبيرات cron بتعيين جدول زمني بأي درجة من التعقيد. على سبيل المثال، كل يوم في الساعة 9:30 صباحًا:

Trigger cronTrigger = TriggerBuilder.newTrigger()        .withIdentity("cronTrigger", "group1")                    

توصيات