স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এর মাধ্যমে আমরা একটি বা একাধিক স্টেপে কাজ করতে পারি এবং প্রতিটি কাজের মধ্যে প্রক্রিয়া নির্ধারণ করতে পারি। এই প্রক্রিয়াগুলোর মধ্যে Job Parameters এবং JobExecutionContext দুটি গুরুত্বপূর্ণ উপাদান, যা ব্যাচ প্রসেসের মধ্যে ডেটা শেয়ার এবং কনফিগারেশন পরিচালনা করতে সাহায্য করে। এই দুটি উপাদানকে স্পষ্টভাবে বোঝা গেলে ব্যাচ প্রোসেসিং আরও কার্যকরী এবং নিয়ন্ত্রিত করা যায়।
Job Parameters
Job Parameters হল সেই ভ্যালু যা একটি স্প্রিং ব্যাচ জব চালানোর সময় পাস করা হয়। এগুলি সাধারণত ইনপুট হিসাবে ব্যবহার করা হয় এবং ব্যাচ জবের execution শুরু করার সময় বিভিন্ন প্রপার্টি বা কনফিগারেশন ভ্যালু হিসাবে প্রেরণ করা হয়। Job Parameters এর মাধ্যমে আমরা বিভিন্ন ধরনের ইনপুট কনফিগারেশন বা তথ্য জব এক্সিকিউশন শুরু করার আগে সেট করতে পারি, যেমন— ডেটা ফাইলের লোকেশন, ডেটাবেস কানেকশন ডিটেইলস, সময় বা নির্দিষ্ট কোনও কাস্টম প্যারামিটার।
Job Parameters এর উদাহরণ:
- এনভায়রনমেন্ট ভ্যালু: যেমন, প্রোডাকশন অথবা ডেভেলপমেন্ট পরিবেশের জন্য বিভিন্ন প্যারামিটার পাস করা।
- ফাইল লোকেশন: কোন ফাইল থেকে ডেটা পড়তে হবে বা কোথায় আউটপুট লিখতে হবে, সে সম্পর্কিত প্যারামিটার।
- টাইমস্ট্যাম্প: বিশেষ সময়সীমায় ব্যাচ এক্সিকিউশন চালাতে চান, সে সম্পর্কিত প্যারামিটার।
Job Parameters ব্যবহার করা:
স্প্রিং ব্যাচে Job Parameters ব্যবহার করতে হলে, এগুলোকে JobLauncher এর মাধ্যমে জবকে রান করার সময় পাস করতে হয়। এখানে একটি উদাহরণ দেয়া হলো:
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class BatchJobRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job myJob;
public void runJob() throws Exception {
// Creating job parameters
JobParameters jobParameters = new JobParametersBuilder()
.addString("inputFile", "file:/data/input.csv")
.addLong("timestamp", System.currentTimeMillis())
.toJobParameters();
// Running the job with parameters
jobLauncher.run(myJob, jobParameters);
}
}
এখানে JobParametersBuilder ব্যবহার করে একটি প্যারামিটার সেট তৈরি করা হয়েছে, যেখানে inputFile এবং timestamp দুটি প্যারামিটার নির্ধারণ করা হয়েছে।
JobExecutionContext
JobExecutionContext হল একটি কনটেক্সট অবজেক্ট যা একটি Job এর execution চলাকালে বা শেষ হওয়ার পর ব্যাচ প্রসেসে প্রয়োজনীয় তথ্য বা অবস্থা (state) সংরক্ষণ করতে ব্যবহৃত হয়। এটি একটি জবের মধ্যে পারস্পরিক অবস্থা বা ডেটা শেয়ার করতে সাহায্য করে এবং এটি কেবল ব্যাচ প্রসেসের চলমান স্টেপগুলির মধ্যে ডেটা শেয়ার করতে ব্যবহৃত হয়।
JobExecutionContext-এর মাধ্যমে, আপনি একটি জবের execution এর সময় প্রয়োজনীয় intermediate ফলাফল বা স্টেট সংরক্ষণ করতে পারেন, যা পরবর্তী স্টেপে কাজে আসতে পারে। একে আপনি মূলত ডেটা ক্যাশিং বা অবস্থা ট্র্যাকিংয়ের জন্য ব্যবহার করতে পারেন।
JobExecutionContext এর ব্যবহার:
যখন একটি জব execution হয়, তখন তার execution সম্পর্কিত বিভিন্ন তথ্য যেমন কাস্টম ডেটা বা inter-step data কে JobExecutionContext এ সংরক্ষণ করা যায়।
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.core.annotation.BeforeStep;
public class MyStepListener implements StepExecutionListener {
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
// Accessing JobExecutionContext for storing data
JobExecution jobExecution = stepExecution.getJobExecution();
jobExecution.getExecutionContext().put("processedRecords", 0);
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
// Retrieving data from JobExecutionContext after step
JobExecution jobExecution = stepExecution.getJobExecution();
Integer processedRecords = (Integer) jobExecution.getExecutionContext().get("processedRecords");
System.out.println("Total processed records: " + processedRecords);
return ExitStatus.COMPLETED;
}
}
এখানে JobExecutionContext এর মধ্যে processedRecords নামে একটি কাস্টম ডেটা স্টোর করা হচ্ছে, যা পরে afterStep মেথডে পুনরায় ব্যবহার করা হচ্ছে।
Job Parameters এবং JobExecutionContext এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Job Parameters | JobExecutionContext |
|---|---|---|
| ব্যবহার | জব শুরু করার সময় ইনপুট হিসেবে ব্যবহৃত প্যারামিটার। | জব চলাকালে বা শেষে ডেটা বা স্টেট সংরক্ষণের জন্য ব্যবহৃত। |
| লাইট-ওয়েট | হ্যাঁ, এটি সাধারণত স্ট্রিং এবং অন্যান্য প্রিমিটিভ টাইপ প্যারামিটার ধারণ করে। | এটি সাধারণত অবজেক্টগুলো ধারণ করে এবং জবের execution চলাকালীন তথ্য রাখে। |
| ডেটার ধরন | স্ট্রিং, লং, ডাবল, ডেট টাইপ ডেটা। | কোনো ধরনের অবজেক্ট (যেমন, Integer, List, Map, ইত্যাদি)। |
| কোন সময় ব্যবহার করা হয়? | জব রান করার সময় পাস করা হয়। | এক বা একাধিক স্টেপে ডেটা শেয়ার করতে ব্যবহৃত হয়। |
সারাংশ
Job Parameters এবং JobExecutionContext দুটি অত্যন্ত গুরুত্বপূর্ণ উপাদান যা স্প্রিং ব্যাচে ব্যাচ প্রসেসিংকে আরো গতিশীল এবং কার্যকরী করে তোলে। Job Parameters ব্যবহার করে আপনি ব্যাচ জব চালানোর জন্য প্রয়োজনীয় ইনপুট প্যারামিটার পাস করতে পারেন, আর JobExecutionContext ব্যবহারের মাধ্যমে আপনি ব্যাচ জব চলাকালে বা শেষে স্টেট বা মধ্যবর্তী ডেটা সংরক্ষণ করতে পারেন। এই দুটি উপাদান ব্যাচ প্রোসেসিংয়ের নিয়ন্ত্রণ এবং ফলাফল ট্র্যাকিং সহজ করে তোলে।
Read more