স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয় এবং এতে Exception Handling অত্যন্ত গুরুত্বপূর্ণ। যখন বড় পরিমাণ ডেটা প্রসেস করা হয়, তখন ত্রুটি বা ভুল হতে পারে, যা ব্যাচ প্রক্রিয়াকে ব্যাহত করতে পারে। স্প্রিং ব্যাচে Exception Handling এর জন্য বেশ কিছু কৌশল রয়েছে যা ত্রুটির কারণে ব্যাচ কাজকে স্থগিত বা রোলব্যাক করার প্রক্রিয়া সহজ করে তোলে।
স্প্রিং ব্যাচে ত্রুটি পরিচালনার জন্য বিভিন্ন কৌশল রয়েছে, যেমন Skip Policy, Retry Policy, এবং Custom Exception Handling। এখানে আমরা এগুলোর বিস্তারিত উদাহরণ সহ আলোচনা করব।
১. Skip Policy (Skip Exceptions)
স্প্রিং ব্যাচে Skip Policy ব্যবহার করে আপনি নির্দিষ্ট কিছু ত্রুটি এড়িয়ে যেতে পারেন। অর্থাৎ, যদি কোনো ত্রুটি ঘটে, তাহলে সেগুলো স্কিপ করা যাবে এবং ব্যাচটি পরবর্তী রেকর্ডের জন্য চালু থাকবে।
SkipPolicy কনফিগারেশন
স্প্রিং ব্যাচে SkipPolicy কনফিগার করতে, আপনি SkipListener বা skipLimit ব্যবহার করতে পারেন। skipLimit সেট করলে, আপনি কতগুলো ত্রুটি স্কিপ করতে চান তা নির্ধারণ করতে পারবেন।
উদাহরণ: Skip Policy কনফিগারেশন
import org.springframework.batch.core.step.skip.LimitCheckingItemSkipPolicy;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<User, User>chunk(2)
.reader(itemReader())
.processor(new UserItemProcessor())
.writer(new UserItemWriter())
.faultTolerant() // Fault tolerance enabled
.skip(Exception.class) // Skip any Exception
.skipLimit(5) // Skip up to 5 exceptions
.build();
}
এখানে:
skip(Exception.class): কোনো Exception ঘটলে সেটি স্কিপ করবে।skipLimit(5): সর্বাধিক ৫টি ত্রুটি স্কিপ করা যাবে।
SkipListener
যদি আপনি ব্যাচ প্রসেসিংয়ের সময় কোনো রেকর্ড স্কিপ হওয়া নিয়ে বিশেষ লগিং বা অ্যাকশন নিতে চান, তাহলে SkipListener ব্যবহার করতে পারেন।
import org.springframework.batch.core.listener.ItemSkipListenerSupport;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
@Bean
public SkipListener<User, User> skipListener() {
return new ItemSkipListenerSupport<User, User>() {
@Override
public void onSkipInProcess(User item, Throwable t) {
System.out.println("Skipping item: " + item + " due to: " + t.getMessage());
}
};
}
এখানে, onSkipInProcess মেথডে আপনি স্কিপ হওয়া রেকর্ড এবং ত্রুটির তথ্য লগ করতে পারেন।
২. Retry Policy (Retry on Exception)
Retry Policy ব্যবহার করে আপনি কিছু নির্দিষ্ট ত্রুটি পুনরায় চেষ্টা করতে পারেন। এই কৌশলের মাধ্যমে, নির্দিষ্ট ত্রুটি ঘটলে, ব্যাচ নির্দিষ্ট সংখ্যক বার পুনরায় চেষ্টা করবে।
RetryPolicy কনফিগারেশন
স্প্রিং ব্যাচে RetryPolicy কনফিগার করার জন্য RetryTemplate এবং SimpleRetryPolicy ব্যবহার করা হয়।
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.beans.factory.annotation.Autowired;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<User, User>chunk(10)
.reader(itemReader())
.processor(new UserItemProcessor())
.writer(new UserItemWriter())
.faultTolerant()
.retry(Exception.class) // Retry on any Exception
.retryLimit(3) // Retry limit set to 3
.build();
}
এখানে:
retry(Exception.class): যদি কোনো Exception ঘটে, তবে তা পুনরায় চেষ্টা করবে।retryLimit(3): সর্বাধিক ৩ বার পুনরায় চেষ্টা করা হবে।
Custom Retry Policy
আপনি SimpleRetryPolicy ব্যবহার করে কাস্টমRetryPolicy তৈরি করতে পারেন। নিচে একটি কাস্টম RetryPolicy উদাহরণ দেয়া হলো:
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;
@Bean
public RetryTemplate retryTemplate() {
SimpleRetryPolicy policy = new SimpleRetryPolicy();
policy.setMaxAttempts(5); // Maximum 5 attempts
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setRetryPolicy(policy);
return retryTemplate;
}
এখানে, কাস্টম RetryPolicy তৈরি করা হয়েছে যা ৫ বার পর্যন্ত পুনরায় চেষ্টা করবে।
৩. Custom Exception Handling
স্প্রিং ব্যাচে Custom Exception Handling কাস্টম ব্যাচ প্রসেসিংয়ের জন্য একটি গুরুত্বপূর্ণ কৌশল। আপনি ব্যাচ কাজের সময় নির্দিষ্ট ত্রুটিগুলিকে কাস্টমভাবে হ্যান্ডল করতে পারেন। এর জন্য আপনি SkipListener, RetryListener, এবং ItemProcessor ব্যবহার করতে পারেন।
ItemProcessor ত্রুটি Handling
আপনি ItemProcessor ক্লাসে ত্রুটি হ্যান্ডলিং করতে পারেন। উদাহরণস্বরূপ, যদি কোনো ডেটা নাল হয়, তবে আপনি একটি কাস্টম এক্সেপশন তৈরি করে তা ফেলে দিতে পারেন।
import org.springframework.batch.item.ItemProcessor;
public class UserItemProcessor implements ItemProcessor<User, User> {
@Override
public User process(User user) throws Exception {
if (user.getName() == null) {
throw new CustomException("Name is missing");
}
return user;
}
}
এখানে, যদি User অবজেক্টের name ফিল্ড নাল থাকে, তবে CustomException ফেলে দেওয়া হবে।
CustomException Class
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
এই কাস্টম এক্সেপশনটি ব্যাচ প্রসেসিংয়ের সময় নির্দিষ্ট ধরনের ত্রুটি হ্যান্ডলিং করতে ব্যবহার করা হবে।
৪. ব্যাচের ফলাফল লগিং (Logging Batch Execution Results)
স্প্রিং ব্যাচের মাধ্যমে আপনি ব্যাচের বিভিন্ন স্টেপের ফলাফল লগ করতে পারেন এবং বিভিন্ন ত্রুটি বা ব্যতিক্রমের ক্ষেত্রে এগুলোর প্রতি মনিটরিং করতে পারেন।
Batch Job Execution Listener
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionException;
@Bean
public JobExecutionListenerSupport listener() {
return new JobExecutionListenerSupport() {
@Override
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus().isUnsuccessful()) {
System.out.println("Job failed with exception: " + jobExecution.getAllFailureExceptions());
}
}
};
}
এখানে, JobExecutionListenerSupport ব্যবহার করে আমরা ব্যাচ কাজ শেষ হওয়ার পর ত্রুটি লগ করতে পারি।
সারাংশ
স্প্রিং ব্যাচে Exception Handling অত্যন্ত গুরুত্বপূর্ণ এবং এর জন্য কিছু শক্তিশালী কৌশল রয়েছে:
- Skip Policy: ত্রুটি হলে রেকর্ড স্কিপ করা।
- Retry Policy: নির্দিষ্ট ত্রুটির জন্য পুনরায় চেষ্টা করা।
- Custom Exception Handling: কাস্টম ত্রুটি হ্যান্ডলিং তৈরি করা।
এগুলো ব্যবহার করে আপনি ব্যাচ প্রসেসিংয়ের ক্ষেত্রে ত্রুটি হ্যান্ডলিং আরও কার্যকরী এবং নির্ভরযোগ্য করতে পারেন।
Read more