স্প্রিং ব্যাচ (Spring Batch) হল একটি শক্তিশালী ফ্রেমওয়ার্ক, যা বিশেষভাবে বড় পরিমাণ ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেমন ডেটা মাইগ্রেশন, ডেটা ট্রান্সফরমেশন এবং ডেটা লোডিং। যখন ব্যাচ প্রসেসিংয়ের কাজ একাধিক সময়সূচিতে সম্পন্ন করার প্রয়োজন হয়, তখন Job Scheduling ব্যবহার করা হয়। স্প্রিং ব্যাচে Job Scheduling-এর মাধ্যমে নির্দিষ্ট সময়ের মধ্যে ব্যাচ জব চালানো সম্ভব হয়, যা সাধারণত অ্যাপ্লিকেশন ডেভেলপমেন্টে প্রয়োজন হয়, যেমন রাতে ডেটা আপডেট করা, দৈনিক বা সাপ্তাহিক রিপোর্ট তৈরি করা ইত্যাদি।
স্প্রিং ব্যাচ নিজে কোনো সিডিউলার (Scheduler) প্রদান না করলেও, এটি অন্যান্য সিডিউলার ফ্রেমওয়ার্কের সঙ্গে সহজেই ইন্টিগ্রেট করা যায়, যেমন Quartz Scheduler অথবা Spring Task Scheduler।
Job Scheduling-এর প্রয়োজনীয়তা
- অটোমেশন: ব্যাচ প্রসেসিং কাজগুলো নির্দিষ্ট সময়ে স্বয়ংক্রিয়ভাবে সম্পন্ন করা যায়, যা ম্যানুয়াল ইনপুট বা প্রক্রিয়া প্রয়োজনীয়তা কমিয়ে দেয়।
- পারফরম্যান্স: নির্দিষ্ট সময়ে ব্যাচ কাজগুলো চালানোর মাধ্যমে সিস্টেমের ওপর চাপ কমানো যায়, বিশেষত যখন বড় পরিমাণ ডেটার সঙ্গে কাজ করা হয়।
- নির্ভরযোগ্যতা: নির্দিষ্ট সময়ের মধ্যে কাজ সম্পন্ন করার জন্য Job Scheduling ব্যবহৃত হলে, এটির কার্যকারিতা নির্ভরযোগ্য থাকে এবং নির্ধারিত সময়ে কাজ সম্পন্ন হয়।
স্প্রিং ব্যাচ Job Scheduling করার জন্য কৌশল
স্প্রিং ব্যাচে Job Scheduling-এর জন্য দুটি প্রধান কৌশল ব্যবহৃত হয়:
- Spring TaskScheduler: এটি স্প্রিং ফ্রেমওয়ার্কের একটি অংশ এবং এতে নির্দিষ্ট সময় পর পর ব্যাচ জব চালানোর জন্য সহজ কনফিগারেশন সমর্থন করা হয়।
- Quartz Scheduler: এটি একটি শক্তিশালী, ওপেন সোর্স সিডিউলিং ফ্রেমওয়ার্ক, যা অনেক বেশি কনফিগারেশন অপশন এবং ক্ষমতা প্রদান করে।
১. Spring TaskScheduler দিয়ে Job Scheduling
স্প্রিং ফ্রেমওয়ার্কের TaskScheduler ক্লাস ব্যাচ জবের জন্য একটি সহজ ও লাইটওয়েট সিডিউলার সেবা প্রদান করে। এখানে আমরা @Scheduled অ্যানোটেশন ব্যবহার করে একটি ব্যাচ জব সিডিউল করতে পারি।
উদাহরণ: Spring TaskScheduler দিয়ে Job Scheduling
ধরা যাক, আমাদের একটি স্প্রিং ব্যাচ জব রয়েছে যা প্রতিদিন রাত ১২টায় চালাতে হবে। এটি করার জন্য আমরা Spring TaskScheduler ব্যবহার করব।
Step 1: @Scheduled অ্যানোটেশন ব্যবহার
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job importUserJob;
@Scheduled(cron = "0 0 0 * * ?") // This cron expression runs the job at 12 AM every day
public void runJob() throws Exception {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("timestamp", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(importUserJob, jobParameters);
}
}
এখানে:
@Scheduled(cron = "0 0 0 * * ?"): এই ক্রন এক্সপ্রেশনটি প্রতিদিন রাত ১২টায় জব চালানোর জন্য নির্ধারিত হয়েছে।jobLauncher.run(): স্প্রিং ব্যাচের জব চালানোর জন্য ব্যবহৃত হয়।
এই পদ্ধতি স্প্রিং ফ্রেমওয়ার্কের TaskScheduler এর মাধ্যমে সহজ এবং কার্যকর।
২. Quartz Scheduler দিয়ে Job Scheduling
Quartz Scheduler একটি শক্তিশালী ওপেন সোর্স জব সিডিউলিং লাইব্রেরি, যা স্প্রিং ব্যাচের সাথে ইন্টিগ্রেট করা যেতে পারে। এটি বেশি কনফিগারেশন সুবিধা প্রদান করে এবং বড় পরিমাণ কাজ সিডিউল করার জন্য উপযুক্ত।
উদাহরণ: Quartz Scheduler দিয়ে Job Scheduling
স্প্রিং ব্যাচে Quartz Scheduler ইন্টিগ্রেট করতে কিছু পদক্ষেপ অনুসরণ করতে হবে।
Step 1: Maven Dependencies
প্রথমে, আপনাকে spring-boot-starter-quartz ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
Step 2: Quartz Configurator Class
এখন, Quartz কনফিগারেশন ক্লাস তৈরি করতে হবে। এখানে আমরা একটি JobDetail এবং Trigger তৈরি করব, যা ব্যাচ জবটি সিডিউল করবে।
@Configuration
public class QuartzConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job importUserJob;
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(QuartzJob.class)
.withIdentity("importUserJob")
.storeDurably()
.build();
}
@Bean
public Trigger trigger() {
return TriggerBuilder.newTrigger()
.forJob(jobDetail())
.withIdentity("importUserJobTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")) // Runs at 12 AM every day
.build();
}
@Bean
public Scheduler scheduler() throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail(), trigger());
return scheduler;
}
}
Step 3: Quartz Job Class
এখন, আমরা একটি QuartzJob ক্লাস তৈরি করব যা আমাদের ব্যাচ জব চালাবে।
public class QuartzJob implements Job {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job importUserJob;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("timestamp", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(importUserJob, jobParameters);
} catch (Exception e) {
throw new JobExecutionException(e);
}
}
}
এখানে:
QuartzJob: এই ক্লাসটি স্প্রিং ব্যাচ জব চালানোর জন্য তৈরি করা হয়েছে।JobExecutionContext: Quartz সিডিউলারের কাজের জন্য এটি ব্যবহার করা হয়।
Step 4: স্প্রিং ব্যাচের Job
এখন স্প্রিং ব্যাচের সাধারণ Job কনফিগারেশনটি যুক্ত করতে হবে, যেমন পূর্বের উদাহরণে দেখানো হয়েছিল।
উপসংহার
স্প্রিং ব্যাচের Job Scheduling একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ব্যাচ প্রসেসিংকে নির্দিষ্ট সময়ে চালানোর জন্য ব্যবহৃত হয়। স্প্রিং ব্যাচে জব সিডিউল করতে দুটি প্রধান পদ্ধতি রয়েছে: Spring TaskScheduler এবং Quartz Scheduler।
- Spring TaskScheduler সহজ এবং লাইটওয়েট সিডিউলিংয়ের জন্য উপযুক্ত এবং সহজ কনফিগারেশন সুবিধা দেয়।
- Quartz Scheduler অধিক কনফিগারেশন ক্ষমতা এবং শক্তিশালী সিডিউলিং অপশন প্রদান করে, যা বড় অ্যাপ্লিকেশন এবং জটিল কাজ সিডিউল করার জন্য আদর্শ।
আপনি আপনার প্রয়োজন অনুযায়ী যে কোনো একটি পদ্ধতি ব্যবহার করে স্প্রিং ব্যাচের জব সিডিউল করতে পারেন।
Read more