স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রোসেসিং ও ডেটা ট্রান্সফরমেশন কার্যক্রম সহজ করে তোলে। ItemProcessor স্প্রিং ব্যাচের একটি গুরুত্বপূর্ণ উপাদান, যা একটি স্টেপের মধ্যে রিড করা আইটেমগুলো প্রসেস (transform) করার জন্য ব্যবহৃত হয়। এই প্রসেসিং স্টেপটি ডেটার মান পরিবর্তন করতে বা ফিল্টার করতে ব্যবহার করা হয়।
এখানে আমরা দেখব কিভাবে একটি Custom ItemProcessor তৈরি করা যায়, যা আপনার নির্দিষ্ট ডেটা প্রসেসিং চাহিদা পূরণ করতে সহায়তা করবে।
ItemProcessor এর ভূমিকা
ItemProcessor স্প্রিং ব্যাচের ItemProcessor<T, R> ইন্টারফেস ইমপ্লিমেন্ট করে কাজ করে, যেখানে:
Tহলো ইনপুট আইটেম টাইপ (যা আপনি রিড করবেন)।Rহলো আউটপুট আইটেম টাইপ (যা আপনি প্রসেস করার পর রিটার্ন করবেন)।
এটি সাধারণত read এবং write অপারেশনের মধ্যে ব্যবহৃত হয়, যেখানে read অপারেশন ডেটা রিড করে এবং write অপারেশন প্রসেস করা ডেটা লেখা হয়।
Custom ItemProcessor তৈরি করার উদাহরণ
ধরা যাক, আমাদের একটি Employee নামক ক্লাস আছে, যা name, age, এবং salary ধারণ করে, এবং আমরা একটি কাস্টম প্রসেসর তৈরি করতে চাই যা প্রতিটি Employee এর বয়স ১৮ এর উপরে হলে তাদের বেতন দ্বিগুণ করে দেবে।
১. Employee ক্লাস তৈরি করা
public class Employee {
private String name;
private int age;
private double salary;
// Constructor, Getters and Setters
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
২. Custom ItemProcessor তৈরি করা
এখন, আমরা একটি কাস্টম ItemProcessor তৈরি করব যা Employee এর বেতন ১৮ বছরের উপরে বয়স হলে দ্বিগুণ করবে।
import org.springframework.batch.item.ItemProcessor;
public class EmployeeItemProcessor implements ItemProcessor<Employee, Employee> {
@Override
public Employee process(Employee employee) throws Exception {
// যদি বয়স ১৮ বছরের উপরে হয়, তাহলে বেতন দ্বিগুণ করুন
if (employee.getAge() > 18) {
double newSalary = employee.getSalary() * 2;
employee.setSalary(newSalary);
System.out.println("Processed Employee: " + employee.getName() + ", New Salary: " + newSalary);
}
return employee;
}
}
এখানে, process মেথডটি একটি Employee অবজেক্ট গ্রহণ করবে এবং যদি বয়স ১৮ বছরের বেশি হয়, তাহলে তার বেতন দ্বিগুণ করে সেট করবে।
৩. Spring Batch Configuration এ ItemProcessor যুক্ত করা
এখন আমাদের স্প্রিং ব্যাচ কনফিগারেশনে এই কাস্টম ItemProcessor যুক্ত করতে হবে।
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
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.batch.core.launch.support.RunIdIncrementer;
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 Job job(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
return jobBuilderFactory.get("employeeJob")
.incrementer(new RunIdIncrementer())
.flow(employeeStep(stepBuilderFactory))
.end()
.build();
}
@Bean
public Step employeeStep(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("employeeStep")
.<Employee, Employee>chunk(10)
.reader(employeeReader())
.processor(employeeItemProcessor())
.writer(employeeWriter())
.build();
}
@Bean
public ItemReader<Employee> employeeReader() {
return new EmployeeReader(); // Implement this based on your input source (e.g., CSV, database, etc.)
}
@Bean
public ItemProcessor<Employee, Employee> employeeItemProcessor() {
return new EmployeeItemProcessor(); // Our custom processor
}
@Bean
public ItemWriter<Employee> employeeWriter() {
return new EmployeeWriter(); // Implement this to write processed data (e.g., save to database, output to file)
}
}
এখানে employeeItemProcessor() মেথডে আমরা কাস্টম EmployeeItemProcessor যুক্ত করেছি।
৪. ItemReader এবং ItemWriter ক্লাস
এটি একটি উদাহরণ যেখানে EmployeeReader এবং EmployeeWriter কাস্টম ক্লাস তৈরি করতে হবে:
EmployeeReader (ItemReader):
import org.springframework.batch.item.ItemReader;
public class EmployeeReader implements ItemReader<Employee> {
private int index = 0;
private List<Employee> employees = Arrays.asList(
new Employee("John", 25, 5000),
new Employee("Doe", 17, 4000),
new Employee("Jane", 22, 4500)
);
@Override
public Employee read() throws Exception {
if (index < employees.size()) {
return employees.get(index++);
}
return null;
}
}
EmployeeWriter (ItemWriter):
import org.springframework.batch.item.ItemWriter;
public class EmployeeWriter implements ItemWriter<Employee> {
@Override
public void write(List<? extends Employee> items) throws Exception {
// Write the processed items to some output (e.g., database, file, etc.)
for (Employee employee : items) {
System.out.println("Writing Employee: " + employee.getName() + " with Salary: " + employee.getSalary());
}
}
}
৫. Batch Job রান করা
আপনি যখন অ্যাপ্লিকেশন চালাবেন, তখন স্প্রিং ব্যাচ আপনার EmployeeItemProcessor ক্লাসটি ব্যবহার করবে এবং সকল Employee এর তথ্য প্রসেস করে তাদের বেতন দ্বিগুণ করবে যদি বয়স ১৮ বছরের উপরে হয়।
import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BatchApplication implements CommandLineRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
jobLauncher.run(job, new JobParameters());
}
}
সারাংশ
এতে দেখানো হয়েছে কীভাবে একটি কাস্টম ItemProcessor তৈরি করা যায় যা ডেটা ট্রান্সফর্মেশন বা ফিল্টারিং করার জন্য ব্যবহৃত হয়। এখানে EmployeeItemProcessor ক্লাস তৈরি করা হয়েছে যা Employee অবজেক্টের salary মান পরিবর্তন করে যদি তার বয়স ১৮ বছরের বেশি হয়। স্প্রিং ব্যাচের সাথে ItemProcessor ব্যবহার করে আপনি সহজেই আপনার ডেটা প্রসেসিং এবং ট্রান্সফর্মেশন কার্যক্রম পরিচালনা করতে পারবেন।