مجدول Quartz لجافا: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

مجدول Quartz لجافا: دليل شامل مع أمثلة عملية

1. ما هو مجدول Quartz ولماذا تحتاجه؟

مجدول Quartz (Quartz Scheduler) هو مكتبة قوية واحترافية لجدولة المهام (job scheduling) في تطبيقات جافا. يوفر للمطورين آلية مرنة وموثوقة لتنفيذ أي كود جافا في وقت محدد أو وفق جدول زمني معين. يمكن دمج Quartz في الأدوات البسيطة التي تعمل عبر سطر الأوامر، وكذلك في الأنظمة المؤسسية المعقدة التي تعمل على خوادم التطبيقات (مثل Tomcat و JBoss و WebLogic) وتطبيقات Spring.

لماذا تحتاجه؟ في أي تطبيق جاد، ستظهر الحاجة عاجلاً أم آجلاً لتنفيذ عمليات في الخلفية مثل: إرسال البريد الإلكتروني الجماعي، إنشاء التقارير، مزامنة البيانات مع الأنظمة الخارجية، تنظيف الملفات المؤقتة، أو التحقق من حالة الطلبات. التنفيذ اليدوي لهذه الآليات باستخدام java.util.Timer أو ScheduledExecutorService يصبح معقداً وغير موثوق مع زيادة المتطلبات: تحتاج إلى إدارة المهام الفائتة، التجميع (clustering)، حفظ الجداول بشكل دائم، والتعامل مع تعبيرات cron المعقدة. Quartz يحل كل هذه المشاكل "بشكل جاهز".

أهم ميزات Quartz: دعم المشغلات المعقدة (cron، فترات زمنية بسيطة، تقاويم)، حفظ المهام والمشغلات في قاعدة بيانات (JDBC JobStore)، التجميع لضمان تحمل الأخطاء، مستمعون لمراقبة التنفيذ، دعم المعاملات (transactions)، وإمكانية إضافة وحذف وتعديل المهام ديناميكياً دون إيقاف المجدول. بفضل هذه الميزات، يعتبر Quartz المعيار الفعلي لجدولة المهام في نظام جافا البيئي.

2. التثبيت

يتم توزيع مجدول Quartz عبر Maven Central. لإضافته إلى مشروعك، استخدم نظام البناء Maven أو Gradle.

Maven

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

<!-- لاستخدام JDBC JobStore (اختياري) -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.3.2</version>
</dependency>

Gradle

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

إذا كنت تستخدم Spring Boot، يكفي إضافة البادئ spring-boot-starter-quartz الذي يتضمن Quartz ويقوم بتكوينه تلقائياً.

3. بداية سريعة — مثال عملي بسيط

لنقم بإنشاء تطبيق بسيط يطبع "مرحباً، Quartz!" كل 5 ثوانٍ.

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

public class QuartzQuickStart {

    // 1. إنشاء Job — الفئة التي ستنفذ العمل
    public static class HelloJob implements Job {
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("مرحباً، Quartz! الوقت: " + System.currentTimeMillis());
        }
    }

    public static void main(String[] args) throws Exception {
        // 2. الحصول على المجدول من المصنع
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        // 3. تشغيل المجدول
        scheduler.start();

        // 4. تعريف JobDetail — وصف المهمة
        JobDetail job = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob", "group1")
                .build();

        // 5. إنشاء مشغل — الجدول الزمني: كل 5 ثوانٍ، إلى ما لا نهاية
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(5)
                        .repeatForever())
                .build();

        // 6. ربط المهمة بالمشغل وجدولتها
        scheduler.scheduleJob(job, trigger);
    }
}

عند تشغيل هذا الكود، سترى رسالة "مرحباً، Quartz!" مطبوعة في وحدة التحكم كل 5 ثوانٍ. هذا هو أبسط مثال لبدء استخدام Quartz.

توصيات