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

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

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

ابدأ الدورة

مجدول مهام Java: Quartz Scheduler — أداة قوية للأتمتة



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



ما هو Quartz Scheduler؟



Quartz هي مكتبة مفتوحة المصدر تتيح لك إنشاء وجدولة وتنفيذ المهام (Jobs) بدقة عالية. وهي تدعم:

  • مشغلات مرنة تعتمد على تعبيرات cron وفواصل زمنية بسيطة.
  • تخزين دائم للمهام في قواعد البيانات (JDBC).
  • التجميع (Clustering) لتحمل الأخطاء.
  • التنفيذ المتوازي وإدارة الخيوط.
  • الاستماع للأحداث (Listeners) للمراقبة.


يُستخدم Quartz بنشاط في Spring Framework (عبر الوحدة spring-boot-starter-quartz) وفي تطبيقات المؤسسات.



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



للبدء، أضف التبعية في 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'


المكونات الأساسية لـ Quartz



لفهم كيفية عمل المجدول، دعنا نحلل عناصره الرئيسية:

  • Job — واجهة تقوم بتنفيذ مهمتك. تحتوي على الطريقة execute(JobExecutionContext context).
  • JobDetail — وصف المهمة (الاسم، المجموعة، البيانات).
  • Trigger — قاعدة التشغيل (الوقت، الفاصل الزمني، cron).
  • Scheduler — المكون الرئيسي الذي يدير جميع المهام.


مثال: مجدول بسيط مع تعبير cron



لننشئ مهمة تطبع رسالة كل 10 ثوانٍ.



الخطوة 1. تنفيذ Job

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;

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


الخطوة 2. إعداد Scheduler وتشغيله

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

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

// 2. إنشاء JobDetail JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build();

// 3. إنشاء Trigger مع تعبير cron (كل 10 ثوانٍ) Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) .build();

// 4. جدولة المهمة scheduler.scheduleJob(job, trigger);

// 5. الانتظار لمدة 30 ثانية للعرض try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); }

// 6. إيقاف المجدول schedule

توصيات