Spring Batch ফ্রেমওয়ার্কে ডেটা প্রসেসিং এর কাজগুলি সাধারণত Batch Jobs আকারে পরিচালিত হয়, যা নির্দিষ্ট সময় বা নির্দিষ্ট সময়সীমায় সম্পাদিত হয়। এই কাজগুলি স্বয়ংক্রিয়ভাবে চলতে পারে এবং পরবর্তী কাজের জন্য প্রস্তুতি নিতে পারে। Spring Batch-এর সাথে Job Scheduling একটি গুরুত্বপূর্ণ বিষয়। এর জন্য দুটি জনপ্রিয় এবং কার্যকরী টুল হল Spring Scheduler এবং Quartz Scheduler।
Spring Scheduler এবং Quartz Scheduler এর মাধ্যমে Scheduling
1. Spring Scheduler
Spring Scheduler একটি সহজ এবং হালকা টুল যা Spring Framework-এ টাস্ক বা ব্যাচ জব চালানোর জন্য ব্যবহৃত হয়। এটি @Scheduled অ্যানোটেশন বা TaskScheduler ব্যবহার করে ব্যাচ কাজগুলো নির্দিষ্ট সময়সূচী অনুযায়ী চালাতে সাহায্য করে।
Spring Scheduler এর বৈশিষ্ট্য:
- সহজ কনফিগারেশন: Spring Scheduler এর কনফিগারেশন খুবই সহজ এবং সহজে ব্যবহারযোগ্য।
- অ্যানোটেশন ভিত্তিক: ব্যাচ কাজগুলি সময়নির্ধারণের জন্য @Scheduled অ্যানোটেশন ব্যবহার করা হয়।
- টাইমার এবং ডেলেইড এক্সিকিউশন: নির্দিষ্ট সময় পর টাস্ক বা জব চালানোর জন্য উপযুক্ত।
উদাহরণ: Spring Scheduler ব্যবহার করে Job Scheduling
Spring Boot অ্যাপ্লিকেশন ব্যবহার করে একটি নির্দিষ্ট সময়সূচীতে জব চালানোর উদাহরণ:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyScheduledJob {
@Scheduled(fixedRate = 5000) // প্রতি 5 সেকেন্ড পর পর কাজটি চালানো হবে
public void runJob() {
System.out.println("Job is running every 5 seconds...");
}
@Scheduled(cron = "0 0/1 * * * ?") // প্রতি 1 মিনিট পর পর কাজটি চালানো হবে
public void runJobEveryMinute() {
System.out.println("Job is running every minute...");
}
}
এখানে:
- @Scheduled(fixedRate = 5000): এটি একটি নির্দিষ্ট সময়ের পর পর কাজ চালাবে, যেমন ৫ সেকেন্ড পর পর।
- @Scheduled(cron = "0 0/1 * * * ?"): এটি Cron Expression ব্যবহার করে প্রতি এক মিনিট পর কাজ চালাবে।
কনফিগারেশন
Spring Boot অ্যাপ্লিকেশনটি @EnableScheduling অ্যানোটেশন ব্যবহার করে সিডিউলিং সক্ষম করতে হয়।
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
public class SchedulingConfig {
// Scheduling Configuration
}
2. Quartz Scheduler
Quartz Scheduler একটি আরও শক্তিশালী এবং বৈশিষ্ট্যপূর্ণ টুল যা Job Scheduling এবং Triggering জন্য ব্যবহৃত হয়। এটি সাধারণত বড় এবং জটিল ব্যাচ প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয় যেখানে সময়সূচী, ট্রিগার এবং শিডিউলিংয়ের আরও বেশি নিয়ন্ত্রণ প্রয়োজন।
Quartz Scheduler এর বৈশিষ্ট্য:
- ভিন্ন ধরনের ট্রিগার: Simple Trigger, Cron Trigger ইত্যাদি।
- পারফরম্যান্স এবং স্কেলেবিলিটি: Quartz Batch Job এর জন্য একটি দুর্দান্ত সল্যুশন যা অনেক বড় পরিমাণ কাজের জন্য কার্যকর।
- Persistence: Quartz Scheduler ডেটাবেসে Job এবং Trigger স্টেট সংরক্ষণ করতে পারে, ফলে জবের অবস্থা রক্ষা করা যায়।
- শক্তিশালী ফিচারস: Job Listener, Job Execution Listener, JobDataMap ইত্যাদি।
Quartz Scheduler ইন্টিগ্রেশন:
Spring Boot এবং Quartz ইন্টিগ্রেশন সহজেই করা যায়। Quartz Scheduler Spring Batch এর সাথে ব্যবহার করে Job এবং Trigger কনফিগার করা যায়। Quartz Job এর সাথে কাজের সময় নির্ধারণের জন্য Cron Expression ব্যবহার করা হয়।
উদাহরণ: Quartz Scheduler Setup in Spring Boot
প্রথমে, Spring Boot প্রজেক্টে Quartz Scheduler এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
Maven ডিপেনডেন্সি:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
Quartz Job কনফিগারেশন:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
@Component
public class MyQuartzJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Quartz Job is running...");
}
}
Quartz Trigger কনফিগারেশন:
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public Trigger cronTrigger() {
return TriggerBuilder.newTrigger()
.withIdentity("cronTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?")) // প্রতি 1 মিনিটে জব চালানোর জন্য
.build();
}
@Bean
public org.quartz.JobDetail jobDetail() {
return JobBuilder.newJob(MyQuartzJob.class)
.withIdentity("myQuartzJob")
.storeDurably()
.build();
}
@Bean
public org.quartz.Scheduler scheduler() throws Exception {
org.quartz.Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail(), cronTrigger());
scheduler.start();
return scheduler;
}
}
এখানে:
- JobDetail: এটি Quartz Job এবং তার কনফিগারেশন ধারণ করে।
- Trigger: এটি Quartz Job এর কার্যকরী সময় নির্ধারণ করে, যেমন প্রতি মিনিটে, প্রতি ঘণ্টায় ইত্যাদি।
- CronScheduleBuilder: এটি Cron Expression ব্যবহার করে নির্দিষ্ট সময় অনুযায়ী কাজের সময় নির্ধারণ করে।
Quartz Job Execution Example:
এই কনফিগারেশন কোড Quartz Scheduler কে ১ মিনিট পর পর MyQuartzJob চালাতে সিডিউল করবে।
Spring Batch এবং Scheduling: Quartz vs Spring Scheduler
| বৈশিষ্ট্য | Spring Scheduler | Quartz Scheduler |
|---|---|---|
| ব্যবহার | ছোট ও সাধারণ কাজের জন্য উপযুক্ত | বড় এবং জটিল কাজের জন্য উপযুক্ত |
| ফিচার | সহজ কনফিগারেশন, অ্যানোটেশন ভিত্তিক | শক্তিশালী ট্রিগার, কাস্টম জব মেটাডেটা, পেরসিস্টেন্স |
| পারফরম্যান্স | হালকা কাজের জন্য উপযুক্ত | বড় পরিমাণ ডেটা বা কাজের জন্য পারফরম্যান্স উন্নত |
| ডিপেনডেন্সি | কম এবং সহজ | বেশি এবং অধিক কনফিগারেশন সহ |
| ক্রন এক্সপ্রেশন | সমর্থিত | সমর্থিত, আরও উন্নত বৈশিষ্ট্য |
| প্ল্যানিং ফিচার | নির্দিষ্ট সময় অনুযায়ী কাজ সিডিউল করা | খুব শক্তিশালী, পুনরায় চালানো (restartability) |
সারসংক্ষেপ
Spring Batch এবং Scheduling খুবই গুরুত্বপূর্ণ হতে পারে, যখন আপনাকে ব্যাচ প্রসেসিংয়ের জন্য নির্দিষ্ট সময়সূচীতে কাজ চালাতে হয়। Spring Scheduler সহজ এবং সরল টাস্ক সিডিউলিংয়ের জন্য উপযুক্ত, তবে যখন কাজ জটিল এবং বড় আকারে হতে হয়, তখন Quartz Scheduler ব্যবহার করা ভালো। Quartz শক্তিশালী ট্রিগারিং এবং পারসিস্টেন্স ফিচার সহ বড় ব্যাচ জব সিডিউলিং এবং পরিচালনায় কার্যকর।
Read more