স্প্রিং ব্যাচ (Spring Batch) সাধারণত ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেখানে ডেটা প্রসেসিং কাজগুলি ব্যাচ আকারে নির্দিষ্ট সময় বা নির্দিষ্ট ইন্টারভ্যাল পর পর করা হয়। Spring Batch Scheduling একটি গুরুত্বপূর্ণ ফিচার, যা আপনাকে ব্যাচ জবগুলো নির্দিষ্ট সময় অথবা ইন্টারভ্যাল অনুযায়ী স্বয়ংক্রিয়ভাবে এক্সিকিউট করতে সাহায্য করে।
স্প্রিং ব্যাচে সিডিউলিংয়ের জন্য সাধারণত Spring Scheduler বা Quartz Scheduler ব্যবহার করা হয়। নিচে এই বিষয়গুলোর ব্যবহার উদাহরণ সহ আলোচনা করা হয়েছে।
স্প্রিং ব্যাচে Spring Scheduler ব্যবহার করে ব্যাচ জবগুলো নির্দিষ্ট সময় বা ইন্টারভ্যাল পর পর সিডিউল করা যায়। এই কাজটি করতে হলে, আপনাকে @EnableScheduling অ্যানোটেশন এবং @Scheduled অ্যানোটেশন ব্যবহার করতে হবে।
Job Scheduling Example with Spring Scheduler:
@Configuration
@EnableScheduling
public class BatchJobScheduler {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Scheduled(fixedRate = 5000) // 5 সেকেন্ড পর পর জব রান হবে
public void runJob() {
try {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(job, jobParameters);
System.out.println("Batch job started...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে:
@Scheduled(fixedRate = 5000)
- এটি একটি নির্দিষ্ট ইন্টারভ্যাল (৫ সেকেন্ড) পর পর জব রান করবে।JobParametersBuilder
ব্যবহার করে একটি নতুন প্যারামিটার time
যুক্ত করা হয়েছে যাতে প্রতিটি জব এক্সিকিউশনের জন্য আলাদা প্যারামিটার তৈরি হয়।@Scheduled(cron = "0 0 0 * * ?") // প্রতিদিন রাত ১২ টায় রান হবে
public void runDailyJob() {
// আপনার ব্যাচ জব রান করার কোড
}
Quartz Scheduler হল একটি শক্তিশালী, ওপেন সোর্স টাস্ক সিডিউলার যা ব্যাচ প্রসেসিংয়ের জন্য আরও উন্নত অপশন সরবরাহ করে। এটি জব সিডিউলিংয়ে আরও বেশি কনফিগারেশন অপশন, যেমন ক্রন এক্সপ্রেশন, রিপিট ইন্টারভ্যাল, এবং সিস্টেমের স্থিতিশীলতা বজায় রাখে।
স্প্রিং ব্যাচে Quartz সিডিউলিং ব্যবহার করতে হলে, আপনাকে প্রথমে Quartz এর ডিপেন্ডেন্সি যোগ করতে হবে।
<!-- pom.xml এ Quartz ডিপেন্ডেন্সি -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
@Configuration
@EnableScheduling
public class QuartzBatchJobScheduler {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(QuartzJob.class)
.withIdentity("batchJob")
.storeDurably()
.build();
}
@Bean
public Trigger jobTrigger() {
return TriggerBuilder.newTrigger()
.withIdentity("batchJobTrigger")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(60)
.repeatForever())
.build();
}
@Bean
public Scheduler scheduler() throws SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail(), jobTrigger());
return scheduler;
}
}
এখানে:
withIntervalInSeconds(60)
৬০ সেকেন্ড পর পর ব্যাচ জবটি এক্সিকিউট করবে।JobDetail
এবং Trigger
কনফিগার করে এবং সিডিউলার তৈরি করে।public class QuartzJob extends QuartzJobBean {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
try {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(job, jobParameters);
System.out.println("Batch job executed by Quartz Scheduler...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে, QuartzJob
ক্লাসটি QuartzJobBean
থেকে ইন্টারফেস ইমপ্লিমেন্ট করে এবং ব্যাচ জব এক্সিকিউট করে।
স্প্রিং ব্যাচ (Spring Batch) এর সিডিউলিংয়ে আপনি Spring Scheduler বা Quartz Scheduler ব্যবহার করতে পারেন। Spring Scheduler সহজ এবং সরল সিডিউলিংয়ের জন্য উপযুক্ত, যেখানে ব্যাচ জবগুলো নির্দিষ্ট সময় বা ইন্টারভ্যাল পর পর এক্সিকিউট করা হয়। অন্যদিকে, Quartz Scheduler আরও শক্তিশালী এবং কাস্টমাইজযোগ্য অপশন প্রদান করে, যেমন ক্রন এক্সপ্রেশন এবং উন্নত ট্রিগারিং অপশন।
আপনি যে ফ্রেমওয়ার্কটি ব্যবহার করেই সিডিউলিং করতে চান না কেন, তা স্প্রিং ব্যাচে ব্যাচ জবের নির্দিষ্ট সময় বা ইন্টারভ্যাল অনুযায়ী কার্যকরভাবে রান করার জন্য সহায়ক হবে।
স্প্রিং ব্যাচ (Spring Batch) হল একটি শক্তিশালী ফ্রেমওয়ার্ক, যা বিশেষভাবে বড় পরিমাণ ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেমন ডেটা মাইগ্রেশন, ডেটা ট্রান্সফরমেশন এবং ডেটা লোডিং। যখন ব্যাচ প্রসেসিংয়ের কাজ একাধিক সময়সূচিতে সম্পন্ন করার প্রয়োজন হয়, তখন Job Scheduling ব্যবহার করা হয়। স্প্রিং ব্যাচে Job Scheduling-এর মাধ্যমে নির্দিষ্ট সময়ের মধ্যে ব্যাচ জব চালানো সম্ভব হয়, যা সাধারণত অ্যাপ্লিকেশন ডেভেলপমেন্টে প্রয়োজন হয়, যেমন রাতে ডেটা আপডেট করা, দৈনিক বা সাপ্তাহিক রিপোর্ট তৈরি করা ইত্যাদি।
স্প্রিং ব্যাচ নিজে কোনো সিডিউলার (Scheduler) প্রদান না করলেও, এটি অন্যান্য সিডিউলার ফ্রেমওয়ার্কের সঙ্গে সহজেই ইন্টিগ্রেট করা যায়, যেমন Quartz Scheduler অথবা Spring Task Scheduler।
স্প্রিং ব্যাচে Job Scheduling-এর জন্য দুটি প্রধান কৌশল ব্যবহৃত হয়:
স্প্রিং ফ্রেমওয়ার্কের TaskScheduler ক্লাস ব্যাচ জবের জন্য একটি সহজ ও লাইটওয়েট সিডিউলার সেবা প্রদান করে। এখানে আমরা @Scheduled
অ্যানোটেশন ব্যবহার করে একটি ব্যাচ জব সিডিউল করতে পারি।
ধরা যাক, আমাদের একটি স্প্রিং ব্যাচ জব রয়েছে যা প্রতিদিন রাত ১২টায় চালাতে হবে। এটি করার জন্য আমরা 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 একটি শক্তিশালী ওপেন সোর্স জব সিডিউলিং লাইব্রেরি, যা স্প্রিং ব্যাচের সাথে ইন্টিগ্রেট করা যেতে পারে। এটি বেশি কনফিগারেশন সুবিধা প্রদান করে এবং বড় পরিমাণ কাজ সিডিউল করার জন্য উপযুক্ত।
স্প্রিং ব্যাচে 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 Batch ফ্রেমওয়ার্কে ডেটা প্রসেসিং এর কাজগুলি সাধারণত Batch Jobs আকারে পরিচালিত হয়, যা নির্দিষ্ট সময় বা নির্দিষ্ট সময়সীমায় সম্পাদিত হয়। এই কাজগুলি স্বয়ংক্রিয়ভাবে চলতে পারে এবং পরবর্তী কাজের জন্য প্রস্তুতি নিতে পারে। Spring Batch-এর সাথে Job Scheduling একটি গুরুত্বপূর্ণ বিষয়। এর জন্য দুটি জনপ্রিয় এবং কার্যকরী টুল হল Spring Scheduler এবং Quartz Scheduler।
Spring Scheduler একটি সহজ এবং হালকা টুল যা Spring Framework-এ টাস্ক বা ব্যাচ জব চালানোর জন্য ব্যবহৃত হয়। এটি @Scheduled
অ্যানোটেশন বা TaskScheduler
ব্যবহার করে ব্যাচ কাজগুলো নির্দিষ্ট সময়সূচী অনুযায়ী চালাতে সাহায্য করে।
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...");
}
}
এখানে:
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
}
Quartz Scheduler একটি আরও শক্তিশালী এবং বৈশিষ্ট্যপূর্ণ টুল যা Job Scheduling এবং Triggering জন্য ব্যবহৃত হয়। এটি সাধারণত বড় এবং জটিল ব্যাচ প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয় যেখানে সময়সূচী, ট্রিগার এবং শিডিউলিংয়ের আরও বেশি নিয়ন্ত্রণ প্রয়োজন।
Spring Boot এবং Quartz ইন্টিগ্রেশন সহজেই করা যায়। Quartz Scheduler Spring Batch এর সাথে ব্যবহার করে Job এবং Trigger কনফিগার করা যায়। Quartz Job এর সাথে কাজের সময় নির্ধারণের জন্য Cron Expression ব্যবহার করা হয়।
প্রথমে, Spring Boot প্রজেক্টে Quartz Scheduler এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
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...");
}
}
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;
}
}
এখানে:
এই কনফিগারেশন কোড Quartz Scheduler কে ১ মিনিট পর পর MyQuartzJob চালাতে সিডিউল করবে।
বৈশিষ্ট্য | Spring Scheduler | Quartz Scheduler |
---|---|---|
ব্যবহার | ছোট ও সাধারণ কাজের জন্য উপযুক্ত | বড় এবং জটিল কাজের জন্য উপযুক্ত |
ফিচার | সহজ কনফিগারেশন, অ্যানোটেশন ভিত্তিক | শক্তিশালী ট্রিগার, কাস্টম জব মেটাডেটা, পেরসিস্টেন্স |
পারফরম্যান্স | হালকা কাজের জন্য উপযুক্ত | বড় পরিমাণ ডেটা বা কাজের জন্য পারফরম্যান্স উন্নত |
ডিপেনডেন্সি | কম এবং সহজ | বেশি এবং অধিক কনফিগারেশন সহ |
ক্রন এক্সপ্রেশন | সমর্থিত | সমর্থিত, আরও উন্নত বৈশিষ্ট্য |
প্ল্যানিং ফিচার | নির্দিষ্ট সময় অনুযায়ী কাজ সিডিউল করা | খুব শক্তিশালী, পুনরায় চালানো (restartability) |
Spring Batch এবং Scheduling খুবই গুরুত্বপূর্ণ হতে পারে, যখন আপনাকে ব্যাচ প্রসেসিংয়ের জন্য নির্দিষ্ট সময়সূচীতে কাজ চালাতে হয়। Spring Scheduler সহজ এবং সরল টাস্ক সিডিউলিংয়ের জন্য উপযুক্ত, তবে যখন কাজ জটিল এবং বড় আকারে হতে হয়, তখন Quartz Scheduler ব্যবহার করা ভালো। Quartz শক্তিশালী ট্রিগারিং এবং পারসিস্টেন্স ফিচার সহ বড় ব্যাচ জব সিডিউলিং এবং পরিচালনায় কার্যকর।
Spring Batch এর মধ্যে Job Scheduling একটি গুরুত্বপূর্ণ কার্যকলাপ, যেখানে নির্দিষ্ট সময়ে বা নির্দিষ্ট নিয়মে কোনো Job চলতে পারে। Cron Expressions হলো একটি বিশেষ টাইম ফরম্যাট যা একটি নির্দিষ্ট সময়সূচী (schedule) তৈরি করতে ব্যবহৃত হয়। Spring Batch এ Job Scheduling করতে Cron Expressions ব্যবহৃত হয়, যার মাধ্যমে আপনি যেকোনো Job নির্দিষ্ট সময়ে চালানোর জন্য কনফিগার করতে পারেন।
Cron Expressions হলো একটি টাইমিং সিস্টেম যা আপনি একটি নির্দিষ্ট সময়সূচী (schedule) তৈরি করতে ব্যবহার করতে পারেন। এটি UNIX-এর cron কমান্ডের ভিত্তিতে কাজ করে, যা একটি টাস্ক নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়ের মধ্যে পুনরাবৃত্তি করে।
একটি Cron Expression সাধারণত ৫টি বা ৬টি ফিল্ড নিয়ে গঠিত হয়:
Cron Expression উদাহরণ:
0 0 12 * * ?
— প্রতি দিন দুপুর ১২টায়।0 15 10 * * ?
— প্রতি দিন ১০:১৫ AM-এ।0 0/5 * * * ?
— প্রতি ৫ মিনিটে।Spring Batch এ Job Scheduling করার জন্য Spring Scheduler বা Spring TaskScheduler ব্যবহার করা হয়। যদি আপনি নির্দিষ্ট সময়ে একটি Batch Job চালাতে চান, তাহলে আপনি @Scheduled
এনোটেশন এবং Cron Expressions ব্যবহার করতে পারেন।
Spring Batch এর Cron Expression এর মাধ্যমে Job Scheduling করার জন্য Spring Boot Scheduler বা Quartz Scheduler ব্যবহার করা যেতে পারে।
Spring Boot এর মধ্যে @Scheduled এনোটেশন ব্যবহার করা হয় Job Scheduling এর জন্য। আপনি @Scheduled(cron = "cron expression")
এনোটেশন ব্যবহার করে Job কে একটি নির্দিষ্ট সময়ে রান করাতে পারেন।
উদাহরণ:
import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class JobScheduler {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job myJob; // Spring Batch Job
@Scheduled(cron = "0 0 12 * * ?") // প্রতিদিন দুপুর ১২টায় Job রান হবে
public void runJob() {
try {
jobLauncher.run(myJob, new JobParameters());
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
@Scheduled(cron = "0 0 12 * * ?")
: এই Cron Expression প্রতিদিন দুপুর ১২টায় Job রান করবে।JobLauncher
: এটি Job শুরু করতে ব্যবহৃত হয়।JobParameters
: Job-এর প্যারামিটারগুলি পাস করতে ব্যবহৃত হয়।Spring Batch এর Job Scheduling এ Cron Expression কিছু বিশেষ ধরনের ব্যবহার হতে পারে:
0 0 12 * * ?
— প্রতিদিন দুপুর ১২টায়।0 15 10 * * ?
— প্রতি দিন সকাল ১০:১৫ AM-এ।0 0/5 * * * ?
— প্রতি ৫ মিনিটে।0 0 0 1 * ?
— প্রতি মাসের প্রথম দিন মধ্যরাতে।@Scheduled
এনোটেশন এবং Cron ExpressionCron Expressions এর মাধ্যমে Scheduling খুব সহজেই করা যায় Spring Boot অ্যাপ্লিকেশনে। আপনার Job বা টাস্ককে নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়ের মধ্যে রান করার জন্য আপনি @Scheduled
এনোটেশন ব্যবহার করতে পারেন।
Cron Expression এর অন্যান্য কিছু উদাহরণ:
Cron Expression | অর্থ |
---|---|
0 0 12 * * ? | প্রতিদিন দুপুর ১২টায় রান হবে |
0 0 10 * * ? | প্রতিদিন ১০:০০ AM-এ রান হবে |
0 0/15 9-17 * * ? | প্রতিদিন সকাল ৯টা থেকে বিকেল ৫টা পর্যন্ত প্রতি ১৫ মিনিটে রান হবে |
0 0 1 * * ? | প্রতি মাসের প্রথম দিনে রান হবে |
0 0 0 * * SUN | প্রতি রবিবার মধ্যরাতে রান হবে |
Spring Batch-এ আরও উন্নত সিডিউলিং করতে Quartz Scheduler ব্যবহার করা যেতে পারে। Quartz Scheduler Spring Batch এর সঙ্গে সহজে ইন্টিগ্রেট হতে পারে, যেখানে Cron Expression এর মাধ্যমে Job Execution Time নির্ধারণ করা হয়।
Quartz Scheduler ব্যবহার করে Spring Batch Job Scheduling:
import org.quartz.*;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.Job;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
@Component
public class QuartzJobScheduler extends QuartzJobBean {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job myJob; // Spring Batch Job
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
try {
jobLauncher.run(myJob, new JobParameters());
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(QuartzJobScheduler.class)
.withIdentity("job1")
.storeDurably()
.build();
}
@Bean
public Trigger trigger() {
return TriggerBuilder.newTrigger()
.withIdentity("trigger1")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?"))
.build();
}
}
এখানে Quartz Scheduler ব্যবহার করে Cron Expression এর মাধ্যমে Spring Batch Job রান করার প্রক্রিয়া দেখানো হয়েছে।
Cron Expressions Spring Batch-এ Job Scheduling এর জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল, যা নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়ের মধ্যে Job চালানোর সুবিধা প্রদান করে। Spring Boot এর @Scheduled এনোটেশন বা Quartz Scheduler এর মাধ্যমে Cron Expressions ব্যবহার করা হয়। এই ধরনের সিডিউলিংয়ের মাধ্যমে ডেটা প্রক্রিয়াকরণ, রিপোর্টিং, বিলিং, বা অন্যান্য ব্যাচ প্রসেসিং কাজগুলি নির্দিষ্ট সময়ে বা নিয়মিতভাবে অটোমেটিক্যালি চালানো যায়। Spring Batch এর মাধ্যমে Cron Expressions ব্যবহার করে ব্যাচ কাজগুলি স্কেলেবল এবং দক্ষভাবে পরিচালিত হয়।
স্প্রিং ব্যাচ (Spring Batch) ব্যাচ প্রসেসিংয়ের জন্য একটি শক্তিশালী ফ্রেমওয়ার্ক, যা ডেটা প্রসেসিং টাস্কগুলিকে ব্যাচ আকারে পরিচালনা করতে সহায়তা করে। যখন আমাদের ব্যাচ জব নির্দিষ্ট সময় পর পর চালানো প্রয়োজন হয়, তখন Batch Job Scheduling ব্যবহার করা হয়। এই প্রক্রিয়া স্বয়ংক্রিয়ভাবে একটি ব্যাচ জব নির্দিষ্ট সময়সীমার মধ্যে চালাতে সক্ষম হয়।
স্প্রিং ব্যাচের মাধ্যমে batch job scheduling পরিচালনা করতে আমরা সাধারণত Spring TaskScheduler বা Quartz Scheduler ব্যবহার করি। এখানে আমরা Spring TaskScheduler ব্যবহার করে একটি ব্যাচ জব সিডিউল করার উদাহরণ দেখব।
ধরা যাক, আমাদের একটি ব্যাচ জব রয়েছে, যা প্রতি দিন ১ ঘণ্টায় একবার চালাতে হবে। এই জবটি Employee
টেবিল থেকে ডেটা রিড এবং প্রসেস করার কাজ করবে।
আমরা প্রথমে একটি সাধারণ ব্যাচ জব তৈরি করব, যা Employee
টেবিল থেকে ডেটা রিড করবে এবং কিছু প্রসেসিং শেষে সেই ডেটা আপডেট করবে।
import org.springframework.batch.core.Step;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BatchConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job updateEmployeeSalaryJob() {
return jobBuilderFactory.get("updateEmployeeSalaryJob")
.start(processEmployeeSalaryStep())
.build();
}
@Bean
public Step processEmployeeSalaryStep() {
return stepBuilderFactory.get("processEmployeeSalaryStep")
.<Employee, Employee>chunk(10)
.reader(reader(null)) // Reader: JdbcCursorItemReader
.processor(new EmployeeSalaryProcessor()) // Processor: EmployeeSalaryProcessor
.writer(writer(null)) // Writer: JdbcBatchItemWriter
.build();
}
}
এখানে, updateEmployeeSalaryJob নামক একটি জব তৈরি করা হয়েছে, যা processEmployeeSalaryStep নামক স্টেপ থেকে ডেটা রিড এবং প্রসেস করবে।
এখন, TaskScheduler ব্যবহার করে প্রতি ঘণ্টায় একবার ব্যাচ জব চালানোর জন্য কনফিগারেশন করা হবে।
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.Job;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class JobScheduler {
private final JobLauncher jobLauncher;
private final Job updateEmployeeSalaryJob;
public JobScheduler(JobLauncher jobLauncher, Job updateEmployeeSalaryJob) {
this.jobLauncher = jobLauncher;
this.updateEmployeeSalaryJob = updateEmployeeSalaryJob;
}
@Scheduled(cron = "0 0 * * * ?") // প্রতি ঘণ্টায় একবার
public void runJob() {
try {
jobLauncher.run(updateEmployeeSalaryJob, new JobParameters());
} catch (Exception e) {
e.printStackTrace();
}
}
}
0 0 * * * ?
মানে প্রতি ঘণ্টার শুরুর সময়।এখন, স্প্রিং কনফিগারেশন ফাইলে সিডিউলার এবং ব্যাচ প্রসেসিংয়ের জন্য প্রয়োজনীয় কনফিগারেশন এবং টাস্ক সিডিউলার সেট আপ করা হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.context.annotation.ComponentScan;
import javax.sql.DataSource;
@Configuration
@EnableBatchProcessing
@EnableScheduling
@ComponentScan(basePackages = "com.example.batch")
public class BatchApplicationConfig {
@Bean
public JobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}
@Bean
public JobRepository jobRepository(DataSource dataSource) throws Exception {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean();
factory.setDataSource(dataSource);
return factory.getObject();
}
@Bean
public JobBuilderFactory jobBuilderFactory(JobRepository jobRepository) {
return new JobBuilderFactory(jobRepository);
}
@Bean
public StepBuilderFactory stepBuilderFactory(JobRepository jobRepository) {
return new StepBuilderFactory(jobRepository, jobRepository.getTransactionManager());
}
}
এখানে, EnableBatchProcessing এবং EnableScheduling ব্যবহৃত হয়েছে, যা ব্যাচ প্রসেসিং এবং সিডিউলিং কার্যক্রম চালাবে। jobLauncher
এবং jobRepository
কে কনফিগার করা হয়েছে, যাতে স্প্রিং ব্যাচ কাজ করতে পারে।
স্প্রিং ব্যাচের মাধ্যমে ব্যাচ জব সিডিউলিং খুব সহজেই করা যায়, বিশেষত Spring TaskScheduler বা Quartz Scheduler ব্যবহার করে। আমাদের উদাহরণে, আমরা @Scheduled অ্যানোটেশন ব্যবহার করে প্রতি ঘণ্টায় একবার ব্যাচ জব চালানোর কনফিগারেশন দেখেছি। এই পদ্ধতিতে স্প্রিং ব্যাচের ব্যাচ জবগুলো নির্দিষ্ট সময় পর পর বা নির্দিষ্ট ক্রনের মাধ্যমে রান করা যায়, যা আপনার ডেটা প্রসেসিং টাস্কগুলোকে স্বয়ংক্রিয়ভাবে পরিচালিত করতে সাহায্য করে।
Read more