Spring Batch একটি শক্তিশালী ব্যাচ প্রসেসিং ফ্রেমওয়ার্ক যা বড় ডেটাসেট প্রক্রিয়া করতে ব্যবহৃত হয়। ব্যাচ প্রসেসিং এ কোনো কোনো ক্ষেত্রে ডাটা প্রসেসিংয়ে সমস্যা হতে পারে (যেমন ফাইলের ভুল ডাটা, ডাটাবেস কনফিগারেশন সমস্যা ইত্যাদি)। এর ফলে পুরো ব্যাচ জব ব্যর্থ হতে পারে। এই ধরনের পরিস্থিতি মোকাবেলা করার জন্য Spring Batch এ Skip Policy এবং Retry Policy প্রদান করা হয়।
- Skip Policy: কোনো নির্দিষ্ট শর্তে একটি আইটেম প্রক্রিয়ার সময় যদি কোনো ত্রুটি ঘটে, তবে সেই আইটেমটি বাদ দেওয়া (skip) যাবে, এবং বাকি আইটেমগুলো প্রক্রিয়া হতে থাকবে।
- Retry Policy: যদি কোনো আইটেম প্রক্রিয়ার সময় ত্রুটি ঘটে, তবে ত্রুটিটি কয়েকবার পুনরায় চেষ্টা করা (retry) হবে, যতক্ষণ না তা সফল হয়।
Spring Batch এ Skip Policy এবং Retry Policy এর মাধ্যমে আমরা ব্যাচ প্রক্রিয়ার নির্ভরযোগ্যতা এবং স্থায়িত্ব বৃদ্ধি করতে পারি।
Skip Policy
Skip Policy এমন একটি কৌশল যা কোনো নির্দিষ্ট ত্রুটির কারণে আইটেমটি প্রক্রিয়া করার সময় সমস্যা এলে, সেই আইটেমটি বাদ (skip) করে দেয় এবং প্রক্রিয়া অব্যাহত রাখে। এটি সাধারণত তখন ব্যবহার করা হয় যখন আইটেমটি কোনো কারণে প্রক্রিয়া করা সম্ভব না হয় (যেমন ডাটাবেসের নির্দিষ্ট রেকর্ড পাওয়া যায়নি)।
Skip Policy কনফিগারেশন
Spring Batch এ SkipPolicy কনফিগার করতে হলে আপনি SkipPolicy এবং skipLimit সেট করতে পারেন। এটি ItemProcessor বা ItemReader এ ব্যবহার করতে পারেন।
উদাহরণ ১: SkipPolicy কনফিগারেশন
package com.example.demo;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.step.skip.SkipPolicy;
import org.springframework.batch.core.step.skip.LimitSkippedItemCountException;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BatchConfig {
@Bean
public SkipPolicy skipPolicy() {
return (throwable, skipCount) -> {
// Example: Skip the item if it exceeds 5 retries
return skipCount <= 5;
};
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory,
ItemReader<String> reader,
ItemProcessor<String, String> processor,
ItemWriter<String> writer,
SkipPolicy skipPolicy) {
return stepBuilderFactory.get("step1")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.faultTolerant() // Enable fault tolerance
.skip(Exception.class) // Skip specific exceptions
.skipLimit(5) // Skip up to 5 exceptions
.skipPolicy(skipPolicy) // Set the custom skip policy
.build();
}
}
এখানে, skipPolicy() মেথডটি একটি কাস্টম SkipPolicy প্রদান করে যা নির্দিষ্ট ত্রুটির জন্য ৫টি আইটেম পর্যন্ত সঠিকভাবে প্রক্রিয়া না হলে সেগুলো বাদ (skip) করতে বলে।
- skip(Exception.class): কোন ধরনের ত্রুটি ঘটলে সেই ত্রুটি জন্য skip করতে বলা হয়।
- skipLimit(5): ৫টি ত্রুটি পরবর্তী সময়ে সেগুলো skip হবে।
উদাহরণ ২: SkipPolicy কাস্টমাইজেশন
package com.example.demo;
import org.springframework.batch.core.step.skip.SkipPolicy;
import org.springframework.batch.core.step.skip.LimitSkippedItemCountException;
import org.springframework.stereotype.Component;
@Component
public class CustomSkipPolicy implements SkipPolicy {
@Override
public boolean shouldSkip(Throwable throwable, int skipCount) throws LimitSkippedItemCountException {
// Skip only certain exceptions like DataAccessException
if (throwable instanceof SomeSpecificException) {
return true;
}
return skipCount < 3; // Skip up to 3 times for other exceptions
}
}
এখানে CustomSkipPolicy তে নির্দিষ্ট ধরনের ত্রুটি (যেমন SomeSpecificException) পাওয়ার পরে সেটি skip করতে বলা হয়েছে। অন্য ত্রুটির জন্য ৩টি পর্যন্ত retry করার সুযোগ দেওয়া হচ্ছে।
Retry Policy
Retry Policy একটি কৌশল যা কোনো আইটেম প্রক্রিয়ার সময় ত্রুটি হলে, সেটি পুনরায় চেষ্টা করতে (retry) সাহায্য করে। যখন কোনো আইটেমে ত্রুটি ঘটে, তখন RetryTemplate ব্যবহার করে আইটেমটি পুনরায় প্রক্রিয়া করার চেষ্টা করা হয়। Spring Batch এ আপনি retry এর জন্য কাস্টম RetryPolicy তৈরি করতে পারেন।
Retry Policy কনফিগারেশন
Spring Batch এ RetryPolicy কনফিগার করার জন্য RetryTemplate ব্যবহার করা হয় এবং এতে retry এর সংখ্যা এবং শর্ত নির্ধারণ করা হয়।
উদাহরণ ১: RetryPolicy কনফিগারেশন
package com.example.demo;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.core.step.tasklet.TaskletStep;
import org.springframework.batch.core.retry.policy.SimpleRetryPolicy;
import org.springframework.batch.core.retry.support.RetryTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BatchConfig {
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(3); // Retry up to 3 times
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
@Bean
public Step retryStep(StepBuilderFactory stepBuilderFactory, Tasklet tasklet, RetryTemplate retryTemplate) {
TaskletStep step = stepBuilderFactory.get("retryStep")
.tasklet(tasklet)
.retryLimit(3) // Retry 3 times
.retryPolicy(retryTemplate.getRetryPolicy()) // Attach retry policy
.build();
return step;
}
}
এখানে, RetryTemplate ব্যবহৃত হচ্ছে যা SimpleRetryPolicy সেট করে, যার মাধ্যমে ৩ বার পর্যন্ত পুনরায় চেষ্টা (retry) করা হবে।
উদাহরণ ২: RetryPolicy কাস্টমাইজেশন
package com.example.demo;
import org.springframework.batch.core.retry.policy.RetryPolicy;
import org.springframework.batch.core.retry.policy.SimpleRetryPolicy;
import org.springframework.stereotype.Component;
@Component
public class CustomRetryPolicy extends SimpleRetryPolicy {
@Override
public boolean canRetry(Throwable throwable) {
if (throwable instanceof SomeSpecificException) {
return true; // Retry on specific exception
}
return super.canRetry(throwable); // Default retry policy
}
}
এখানে CustomRetryPolicy ব্যবহার করে নির্দিষ্ট একটি ত্রুটির জন্য পুনরায় চেষ্টা করা হচ্ছে। যদি এটি অন্য ত্রুটি হয়, তাহলে ডিফল্ট রিটার্ন কন্ডিশন অনুযায়ী কাজ করবে।
Skip Policy এবং Retry Policy এর সুবিধা
- Fault Tolerance: ব্যাচ প্রসেসিংয়ে ত্রুটি হওয়া সত্ত্বেও প্রসেসিং অব্যাহত রাখা সম্ভব হয়।
- Reliability: ব্যাচ প্রক্রিয়া আরও নির্ভরযোগ্য হয় কারণ আপনি Skip বা Retry পলিসি ব্যবহার করে সঠিকভাবে ডাটা প্রসেস করতে পারেন।
- Customization: আপনার প্রক্রিয়া অনুযায়ী আপনি Skip বা Retry পলিসি কাস্টমাইজ করতে পারেন, যেমন নির্দিষ্ট ত্রুটি, retry সংখ্যা, এবং skip এর সীমা নির্ধারণ করা।
সারাংশ
Spring Batch এ Skip Policy এবং Retry Policy ব্যবহারের মাধ্যমে আপনি ব্যাচ প্রসেসিংয়ের নির্ভরযোগ্যতা ও স্থায়িত্ব বৃদ্ধি করতে পারেন। Skip Policy ত্রুটি ঘটলে আইটেমটি বাদ দেয় এবং বাকি আইটেমগুলি প্রসেস করতে থাকে, আর Retry Policy ত্রুটি ঘটলে পুনরায় চেষ্টা করতে দেয়। এই পলিসিগুলি ব্যাচ প্রক্রিয়াকে আরও স্থিতিশীল এবং ত্রুটি সুরক্ষিত করে তোলে।
Read more