Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা বড় আকারের ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেমন ডেটা ট্রান্সফরমেশন, ডেটা মাইগ্রেশন, এবং বড় ডেটাসেট প্রসেসিং। ItemProcessor Spring Batch এ ডেটা প্রসেসিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা ItemReader এবং ItemWriter এর মধ্যে একটি মিডল লেয়ারের মতো কাজ করে।
ItemProcessor একটি ইন্টারফেস যা ডেটার একটি আইটেম (বা ডেটার একটি ইউনিট) গ্রহণ করে এবং সেটি প্রসেস করে, এর মাধ্যমে ডেটার ট্রান্সফরমেশন বা মডিফিকেশন করা হয়। ItemProcessor সাধারণত ডেটাকে একটি ফরম্যাট থেকে অন্য ফরম্যাটে পরিবর্তন করতে ব্যবহৃত হয়, যেমন একটি অবজেক্টের প্রপার্টি পরিবর্তন করা, ফিল্টারিং করা, অথবা ডেটা গুনগত মান যাচাই করা।
ItemProcessor এর কাজ
ItemProcessor ইন্টারফেসে একটি মেথড থাকে যার নাম process(), যেটি একটি ইনপুট আইটেম গ্রহণ করে এবং প্রক্রিয়াকৃত আইটেম রিটার্ন করে। এর মাধ্যমে ডেটা প্রসেস করা হয় এবং তারপর সেটি ItemWriter এ পাঠানো হয়, যেখানে এটি নির্দিষ্ট আউটপুট স্টোরেজে (যেমন ডেটাবেস, ফাইল, ইত্যাদি) সংরক্ষিত হয়।
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}
এখানে:
Iহল ইনপুট টাইপ (যেমন,Personঅবজেক্ট)।Oহল আউটপুট টাইপ (যেমন,ProcessedPersonঅবজেক্ট)।
ItemProcessor এর process() মেথডটি ইনপুট আইটেম গ্রহণ করে এবং একটি নতুন আউটপুট আইটেম রিটার্ন করে। এতে আপনি ট্রান্সফরমেশন, কাস্টম ফিল্টারিং, অথবা ডেটা যাচাইয়ের মতো কাজ করতে পারেন।
ItemProcessor এর উদাহরণ
ধরা যাক, আমাদের একটি ব্যাচ প্রসেসিং অ্যাপ্লিকেশন রয়েছে যেখানে আমরা Person অবজেক্টগুলোর তথ্য প্রসেস করতে চাই এবং তার মধ্যে থাকা age প্রপার্টি অনুযায়ী Person অবজেক্টগুলো ফিল্টার করতে চাই। যদি একটি Person এর বয়স 18 এর কম হয়, তবে সেই Person অবজেক্টটি প্রসেস করার পর ফিল্টার করে সরিয়ে দেওয়া হবে।
Step 1: Model Class (Person)
public class Person {
private String name;
private int age;
// Constructor, Getters, Setters
}
Step 2: ItemProcessor Implementation
public class PersonItemProcessor implements ItemProcessor<Person, Person> {
@Override
public Person process(Person item) throws Exception {
// যদি বয়স 18 এর কম হয়, তবে অবজেক্টটি ফিল্টার করে সরিয়ে ফেলুন
if (item.getAge() < 18) {
return null; // null ফেরত দেওয়া হলে, Spring Batch ঐ আইটেমটি বাদ দিবে
}
// বয়স 18 বা তার বেশি হলে, নামটি ক্যাপিটালাইজ করা হবে
item.setName(item.getName().toUpperCase());
return item; // প্রসেস করা অবজেক্ট ফেরত দিন
}
}
Step 3: Batch Step Configuration
এখন আমরা আমাদের ItemProcessor কে Spring Batch Step এর সাথে কনফিগার করব। এখানে chunk ভিত্তিক স্টেপ ব্যবহার করা হয়েছে যেখানে প্রতি 10টি আইটেম প্রসেস করা হবে:
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10) // প্রতি 10টি আইটেমের পরে কমিট হবে
.reader(personReader()) // Person Reader (যেখানে ডেটা পড়া হবে)
.processor(personProcessor()) // Person Processor (যেখানে ডেটা প্রসেস করা হবে)
.writer(personWriter()) // Person Writer (যেখানে ডেটা লিখা হবে)
.build();
}
@Bean
public ItemReader<Person> personReader() {
return new PersonItemReader(); // Person Reader
}
@Bean
public ItemProcessor<Person, Person> personProcessor() {
return new PersonItemProcessor(); // ItemProcessor ব্যবহার করা হবে
}
@Bean
public ItemWriter<Person> personWriter() {
return new PersonItemWriter(); // Person Writer
}
Step 4: Reader এবং Writer এর উদাহরণ
ItemReader এবং ItemWriter কিভাবে কাজ করে, তা দেখা যাক:
PersonItemReader (ItemReader)
public class PersonItemReader implements ItemReader<Person> {
private List<Person> personList = Arrays.asList(
new Person("John", 20),
new Person("Mary", 17),
new Person("Alex", 25)
);
private int index = 0;
@Override
public Person read() throws Exception {
if (index < personList.size()) {
return personList.get(index++);
} else {
return null; // No more items
}
}
}
PersonItemWriter (ItemWriter)
public class PersonItemWriter implements ItemWriter<Person> {
@Override
public void write(List<? extends Person> items) throws Exception {
// এখানে ডেটা ফাইল বা ডাটাবেসে লেখা হবে
for (Person person : items) {
System.out.println("Writing person: " + person.getName() + ", Age: " + person.getAge());
}
}
}
ItemProcessor এর সুবিধা
- Data Transformation:
ItemProcessorডেটার ট্রান্সফরমেশন বা মডিফিকেশন করতে ব্যবহৃত হয়। আপনি ডেটার বিভিন্ন ফিল্ড পরিবর্তন, যোগ বা বাদ দিতে পারেন। - Filtering: আপনি
process()মেথডের মধ্যেnullরিটার্ন করে ডেটা ফিল্টার করতে পারেন, অর্থাৎ কিছু আইটেম বাদ দিতে পারেন। - Validation:
ItemProcessorডেটা যাচাই করতে ব্যবহৃত হতে পারে, যেমন কোনো ডেটা অবৈধ হলে তা বাদ দেওয়া। - Flexibility: আপনি যে কোনো কাস্টম লজিক প্রয়োগ করতে পারেন, যেমন এনক্রিপশন, ফরম্যাটিং বা কাস্টম মেটা ডেটা যোগ করা।
সারাংশ
Spring Batch এ ItemProcessor ডেটা প্রসেসিংয়ের একটি গুরুত্বপূর্ণ উপাদান, যা ডেটার ট্রান্সফরমেশন, ফিল্টারিং বা যাচাইয়ের জন্য ব্যবহৃত হয়। এটি ItemReader এবং ItemWriter এর মধ্যে একটি মিডল লেয়ার হিসেবে কাজ করে এবং ডেটাকে এক ফরম্যাট থেকে অন্য ফরম্যাটে কনভার্ট করে। process() মেথডের মাধ্যমে ডেটার প্রসেসিং এবং পরিবর্তন করা হয় এবং পরবর্তীতে সেটি ItemWriter এর মাধ্যমে আউটপুটে লিখে দেওয়া হয়। Spring Batch এ ডেটার ট্রান্সফরমেশন এবং প্রক্রিয়াকরণকে কার্যকরভাবে করতে ItemProcessor একটি খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে।