স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়, এবং এটি বিভিন্ন ধরনের ItemReader সরবরাহ করে ডাটা রিড করার জন্য। এই ItemReader গুলি বিভিন্ন ধরনের ডাটা সোর্স থেকে ডাটা পড়তে সহায়তা করে, যেমন ফাইল, ডাটাবেস, বা JPA (Java Persistence API) এর মাধ্যমে।
আজ আমরা আলোচনা করব FlatFileItemReader, JdbcCursorItemReader, এবং JpaPagingItemReader এর ব্যবহারের উপর।
FlatFileItemReader
FlatFileItemReader একটি স্প্রিং ব্যাচ ক্লাস যা সাধারণত টেক্সট ফাইল বা CSV ফাইল থেকে ডাটা রিড করতে ব্যবহৃত হয়। এটি ফাইলের প্রতিটি রেকর্ডকে একটি একক আইটেম হিসেবে রিড করে এবং তাকে প্রসেসিং স্টেপে পাঠায়। FlatFileItemReader সাধারণত ফাইল প্রক্রিয়াকরণে ব্যবহৃত হয় যেখানে ডাটা লাইন বাই লাইন বা ডেলিমিটার দ্বারা আলাদা করা থাকে।
ব্যবহারের উদাহরণ:
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
@Bean
public FlatFileItemReader<Employee> reader() {
FlatFileItemReader<Employee> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("employee.csv"));
// Tokenizer configuration
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setNames(new String[]{"id", "firstName", "lastName", "email"});
// FieldSetMapper to map each line to an object
BeanWrapperFieldSetMapper<Employee> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(Employee.class);
reader.setLineTokenizer(lineTokenizer);
reader.setFieldSetMapper(fieldSetMapper);
return reader;
}
ব্যাখ্যা:
- FlatFileItemReader একটি টেক্সট ফাইল (এখানে
employee.csv) থেকে ডাটা রিড করতে ব্যবহৃত হচ্ছে। - DelimitedLineTokenizer টোকেনাইজারের মাধ্যমে ফাইলের প্রতিটি লাইনকে আলাদা করে, এবং তারপর BeanWrapperFieldSetMapper ব্যবহার করে সেই ডাটা
Employeeক্লাসের অবজেক্টে ম্যাপ করা হয়।
এটি সিপিএফ (CSV ফাইল) বা যে কোনও ডেলিমিটারযুক্ত ফাইল থেকে ডাটা রিড করার জন্য ব্যবহৃত হয়।
JdbcCursorItemReader
JdbcCursorItemReader একটি স্প্রিং ব্যাচ ক্লাস যা ডাটাবেস থেকে ডাটা রিড করতে ব্যবহৃত হয়। এটি JDBC ব্যবহার করে ডাটাবেস কুয়েরি রেজাল্ট সেট থেকে ডাটা রিড করে এবং একটি নির্দিষ্ট অবজেক্টে ম্যাপ করে পাঠায়। এটি লেজি লোডিং পদ্ধতিতে কাজ করে, যার মানে হল যে এটি একে একে ডাটাবেস রেকর্ড রিড করে এবং মেমরিতে লোড করে।
ব্যবহারের উদাহরণ:
import org.springframework.batch.item.database.JdbcCursorItemReader;
import javax.sql.DataSource;
@Bean
public JdbcCursorItemReader<Employee> reader(DataSource dataSource) {
JdbcCursorItemReader<Employee> reader = new JdbcCursorItemReader<>();
reader.setDataSource(dataSource);
reader.setSql("SELECT id, first_name, last_name, email FROM employee");
reader.setRowMapper(new EmployeeRowMapper());
return reader;
}
ব্যাখ্যা:
- JdbcCursorItemReader একটি SQL কুয়েরি (
SELECT) দিয়ে ডাটাবেস থেকে ডাটা রিড করে। - setRowMapper() মেথডের মাধ্যমে প্রতিটি রেকর্ডকে
EmployeeRowMapperক্লাসে ম্যাপ করা হয়। এই ক্লাসটিRowMapperইন্টারফেস ইমপ্লিমেন্ট করে, যা SQL রেজাল্ট সেট থেকে রেকর্ড ম্যাপ করার কাজ করে।
এই পাঠকটি ডাটাবেসের মধ্যে বড় পরিমাণ ডাটা রিড করার জন্য আদর্শ, কারণ এটি লেজি লোডিং ব্যবহার করে এবং মেমরি ব্যবহার কম রাখে।
JpaPagingItemReader
JpaPagingItemReader স্প্রিং ব্যাচে একটি ক্লাস যা JPA (Java Persistence API) ব্যবহার করে পেজিনেশন ভিত্তিক ডাটা রিডিংয়ের জন্য ব্যবহৃত হয়। এটি পেজ বাই পেজ ডাটা রিড করতে পারে, যার মাধ্যমে ডাটাবেস থেকে বড় পরিমাণ ডাটা টুকরো টুকরো করে রিড করা হয় এবং মেমরি ব্যবহারের পরিমাণ কমানো হয়।
ব্যবহারের উদাহরণ:
import org.springframework.batch.item.data.JpaPagingItemReader;
import javax.persistence.EntityManagerFactory;
import org.springframework.data.domain.PageRequest;
@Bean
public JpaPagingItemReader<Employee> reader(EntityManagerFactory entityManagerFactory) {
JpaPagingItemReader<Employee> reader = new JpaPagingItemReader<>();
reader.setQueryString("SELECT e FROM Employee e");
reader.setEntityManagerFactory(entityManagerFactory);
reader.setPageSize(100); // 100 রেকর্ড প্রতি পেজে
return reader;
}
ব্যাখ্যা:
- JpaPagingItemReader JPA এর মাধ্যমে ডাটাবেস থেকে পেজ বাই পেজ ডাটা রিড করে।
setQueryString()পদ্ধতির মাধ্যমে একটি JPQL কুয়েরি ব্যবহার করা হয় ডাটা রিড করার জন্য, এবংsetPageSize()পদ্ধতির মাধ্যমে প্রতিটি পেজের আকার নির্ধারণ করা হয়।
এই পাঠকটি বড় ডাটাবেসের ডাটা পেজ বাই পেজ রিড করতে ব্যবহৃত হয়, যা ব্যাচ প্রসেসিং এর জন্য উপযুক্ত। এটি ডাটাবেসের লোড কমাতে সহায়ক।
সারাংশ
স্প্রিং ব্যাচে ডাটা রিড করার জন্য FlatFileItemReader, JdbcCursorItemReader, এবং JpaPagingItemReader তিনটি গুরুত্বপূর্ণ ItemReader রয়েছে, যা বিভিন্ন সোর্স থেকে ডাটা রিড করতে ব্যবহৃত হয়:
- FlatFileItemReader টেক্সট বা CSV ফাইল থেকে ডাটা রিড করতে ব্যবহৃত হয়।
- JdbcCursorItemReader ডাটাবেস থেকে রেকর্ড একে একে রিড করার জন্য ব্যবহৃত হয়, এটি মেমরি ব্যবহারের জন্য কার্যকরী।
- JpaPagingItemReader JPA ব্যবহার করে ডাটাবেস থেকে পেজ বাই পেজ ডাটা রিড করতে ব্যবহৃত হয়, যা বড় পরিমাণ ডাটার ক্ষেত্রে কার্যকর।
এই ItemReader গুলির মাধ্যমে স্প্রিং ব্যাচে বিভিন্ন ডাটা সোর্স থেকে ডাটা রিডিং করা সম্ভব, এবং প্রতিটি সোর্সের জন্য উপযুক্ত পাঠক নির্বাচন করে পারফরম্যান্স এবং মেমরি ব্যবহারের দিক থেকে কার্যকরী ব্যাচ প্রসেসিং বাস্তবায়ন করা যায়।
Read more