जावा टास्क शेड्यूलर: Quartz Scheduler
जावा में आधुनिक डेवलपमेंट में अक्सर निर्धारित समय पर विशिष्ट कार्य करने की आवश्यकता होती है: ईमेल न्यूज़लेटर भेजना, लॉग्स का आर्काइवेशन, डेटा सिंक्रोनाइज़ेशन या रिपोर्ट जनरेशन। इन कार्यों को हल करने के लिए एक शक्तिशाली और लचीली लाइब्रेरी Quartz Scheduler मौजूद है। यह एक ओपन-सोर्स फ्रेमवर्क है जो ट्रिगर (Triggers) और cron-एक्सप्रेशन का उपयोग करके कार्यों (Jobs) को बनाने, शेड्यूल करने और प्रबंधित करने की अनुमति देता है। Quartz आसानी से Spring Boot, Java EE और किसी भी standalone-एप्लिकेशन के साथ एकीकृत हो जाता है।
Quartz की मुख्य क्षमताएँ
- लचीला शेड्यूलिंग — सरल अंतराल (हर N सेकंड/मिनट) और जटिल cron-एक्सप्रेशन का समर्थन।
- परसिस्टेंसी — एप्लिकेशन रीस्टार्ट के बाद पुनर्प्राप्ति के लिए डेटाबेस (JDBC JobStore) में कार्यों की स्थिति संग्रहीत करना।
- क्लस्टरिंग — फॉल्ट टॉलरेंस के लिए कई नोड्स के बीच कार्यों का वितरण।
- समानांतर निष्पादन — एक साथ कई कार्य चलाने की क्षमता।
- छूटे हुए रन — डाउनटाइम के दौरान व्यवहार का कॉन्फ़िगरेशन (misfire instructions)।
इंस्टॉलेशन और कनेक्शन
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() मेथड के अंदर बिज़नेस लॉजिक लिखा जाता है।
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;
public class HelloJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("नमस्ते! कार्य " + new java.util.Date() + " पर निष्पादित हुआ"); }}शेड्यूलर और ट्रिगर का कॉन्फ़िगरेशन
शेड्यूलर (Scheduler) StdSchedulerFactory फैक्ट्री के माध्यम से बनाया जाता है। फिर एक ट्रिगर बनाया जाता है — सरल (SimpleTrigger) या cron-आधारित (CronTrigger)।
import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;
public class QuartzExample { public static void main(String[] args) throws SchedulerException { // 1. शेड्यूलर प्राप्त करें Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2. कार्य परिभाषित करें JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity("myJob", "group1") .build();
// 3. ट्रिगर बनाएँ — हर 10 सेकंड में चलाएँ Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();
// 4. कार्य को ट्रिगर से बाँधें और शेड्यूलर शुरू करें scheduler.scheduleJob(job, trigger); scheduler.start(); }}cron-एक्सप्रेशन का उपयोग
Cron-एक्सप्रेशन जटिल शेड्यूल सेट करने की अनुमति देते हैं। फॉर्मेट: सेकंड मिनट घंटे दिन-महीना महीना दिन-सप्ताह।
// हर दिन 18:30 पर चलाएँCronScheduleBuilder cronSchedule = CronScheduleBuilder .dailyAtHourAndMinute(18, 30);
// या मैन्युअल: "0 30 18 * * ?" (हर दिन 18:30 पर)Trigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity("cronTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedu