ItemWriter কি?
স্প্রিং ব্যাচে ItemWriter একটি গুরুত্বপূর্ণ উপাদান যা প্রসেস করা ডেটাকে আউটপুটে লিখে। এটি মূলত একটি ইন্টারফেস, এবং এর কাজ হলো যে ডেটা আইটেমগুলো ItemProcessor থেকে প্রক্রিয়াজাত হয়ে এসেছে, সেগুলোকে কোনো নির্দিষ্ট আউটপুট টার্গেটে যেমন ডেটাবেস, ফাইল, কিংবা অন্য কোনো ডেটা স্টোরেজ সিস্টেমে লিখে দেওয়া। ItemWriter এর মাধ্যমে ব্যাচ প্রসেসিংয়ের ফলাফল আউটপুট হিসেবে সংরক্ষণ করা হয়।
স্প্রিং ব্যাচে, ডেটা একটি নির্দিষ্ট আকারের "chunk" হিসেবে প্রক্রিয়া করা হয়, এবং যখন একটি chunk সম্পূর্ণ হয়ে যায়, তখন ItemWriter ওই chunk এর সমস্ত আইটেম একসাথে লিখে ফেলে।
ItemWriter এর ভূমিকা
স্প্রিং ব্যাচের প্রসেসিং চক্রের মধ্যে ItemWriter এর ভূমিকা অত্যন্ত গুরুত্বপূর্ণ। এটি মূলত এই কাজগুলো করে:
- প্রক্রিয়াজাত ডেটা আউটপুটে লেখা:
ItemWriterহল সেই কম্পোনেন্ট যাItemProcessorথেকে প্রক্রিয়াজাত ডেটা নেয় এবং সেগুলোকে নির্দিষ্ট আউটপুট টার্গেটে লেখে। - ব্যাচের আউটপুট প্রদান করা: একটি ব্যাচ প্রসেসিং সিস্টেমে অনেকগুলি আইটেম একসাথে প্রসেস করা হয় এবং
ItemWriterসমস্ত আইটেম একত্রে আউটপুটে লেখার কাজ করে, যা ফাইল বা ডেটাবেস হতে পারে। - ডেটা ইন্টিগ্রিটি নিশ্চিত করা:
ItemWriterডেটাকে সঠিকভাবে এবং নির্ভরযোগ্যভাবে সংরক্ষণ করে। এটি ডেটার integrity এবং consistency বজায় রাখতে সাহায্য করে।
ItemWriter এর মাধ্যমে আপনি বিভিন্ন আউটপুট ডেটা সোর্সে যেমন:
- ফাইল (CSV, XML, JSON ইত্যাদি)
- ডেটাবেস
- কিউ (Queue)
- মেসেজ ব্রোকার (Message Broker)
এগুলোতে ডেটা লিখতে পারেন।
ItemWriter এর কাজের প্রক্রিয়া
স্প্রিং ব্যাচের একটি typical ব্যাচ প্রসেসিং ফ্লো নিম্নরূপ:
- ItemReader: প্রথমে ডেটা পড়ে নেয়া হয়। এটি ডেটা সোর্স থেকে ডেটা রিড করে।
- ItemProcessor: তারপর সেই ডেটা প্রক্রিয়াজাত করা হয়। এটি ডেটাকে পরিবর্তন বা প্রসেস করে।
- ItemWriter: অবশেষে, প্রক্রিয়াজাত ডেটা
ItemWriterএর মাধ্যমে আউটপুটে লিখে দেওয়া হয়।
ItemWriter সাধারনত write() মেথডের মাধ্যমে কাজ করে, যেখানে List<T> আর্গুমেন্ট হিসেবে ডেটার একটি chunk নেয় এবং সেটি আউটপুটে লিখে দেয়।
public interface ItemWriter<T> {
void write(List<? extends T> items) throws Exception;
}
এখানে T হচ্ছে ডেটার টাইপ যা ItemProcessor দ্বারা প্রক্রিয়াজাত হয়েছে এবং write() মেথডে একটি List হিসেবে পাঠানো হচ্ছে।
ItemWriter এর উদাহরণ
ধরা যাক, আপনার একটি ব্যাচ অ্যাপ্লিকেশন রয়েছে যা একটি CSV ফাইলে ডেটা লিখবে। এখানে একটি কাস্টম ItemWriter তৈরি করা হয়েছে যা ফাইলের মধ্যে ডেটা লেখে।
১. ItemWriter উদাহরণ (CSV ফাইল লেখার জন্য)
import org.springframework.batch.item.ItemWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class CsvItemWriter implements ItemWriter<String> {
private static final String OUTPUT_FILE = "output.csv";
@Override
public void write(List<? extends String> items) throws Exception {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(OUTPUT_FILE, true))) {
for (String item : items) {
writer.write(item);
writer.newLine(); // New line after each item
}
} catch (IOException e) {
throw new Exception("Error writing data to CSV file", e);
}
}
}
এখানে:
CsvItemWriterItemWriterইন্টারফেস ইমপ্লিমেন্ট করেছে।write()মেথডে ডেটার একটিListএসেছে এবং এটি ফাইলে লিখে দেওয়া হচ্ছে।
২. ItemWriter উদাহরণ (ডেটাবেসে লেখার জন্য)
স্প্রিং ব্যাচে ডেটাবেসে ডেটা লিখতে JdbcBatchItemWriter বা কাস্টম ItemWriter ব্যবহার করা যায়।
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import javax.sql.DataSource;
@Bean
public JdbcBatchItemWriter<Employee> writer(DataSource dataSource) {
JdbcBatchItemWriter<Employee> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(dataSource);
writer.setSql("INSERT INTO employees (id, name, department) VALUES (?, ?, ?)");
writer.setItemPreparedStatementSetter(new EmployeePreparedStatementSetter());
return writer;
}
এখানে:
JdbcBatchItemWriterডেটাবেসে ব্যাচে ডেটা লেখার জন্য ব্যবহৃত হচ্ছে।setSql()মেথডে SQL স্টেটমেন্ট দেওয়া হয়েছে, যা ডেটাবেসে ডেটা ইনসার্ট করবে।
EmployeePreparedStatementSetter ক্লাসটি SQL প্রশ্নে ডেটা সেট করার জন্য ব্যবহৃত হয়।
ItemWriter এর বিভিন্ন প্রকার
স্প্রিং ব্যাচে বিভিন্ন ধরনের ItemWriter পাওয়া যায়, যেমন:
- FlatFileItemWriter: ফাইল আউটপুটে লেখার জন্য ব্যবহৃত হয়, যেমন CSV, TXT ফাইল।
- JdbcBatchItemWriter: ডেটাবেসে ব্যাচ আউটপুট লেখার জন্য ব্যবহৃত হয়।
- HibernateItemWriter: Hibernate সেশন ব্যবহার করে ডেটাবেসে লেখার জন্য ব্যবহৃত হয়।
- Custom ItemWriter: কাস্টম আউটপুট টার্গেটে ডেটা লেখার জন্য নিজস্ব
ItemWriterতৈরি করা যায়।
সারাংশ
ItemWriter স্প্রিং ব্যাচে একটি গুরুত্বপূর্ণ উপাদান, যার মাধ্যমে প্রসেস করা ডেটা আউটপুটে লেখা হয়। এটি ব্যাচ প্রসেসিংয়ের শেষ ধাপ, যেখানে সমস্ত প্রক্রিয়াজাত আইটেমকে একটি নির্দিষ্ট আউটপুট টার্গেটে যেমন ফাইল বা ডেটাবেসে লিখে দেওয়া হয়। ItemWriter এর মাধ্যমে ডেটার ইন্টিগ্রিটি এবং সঠিকতা নিশ্চিত করা হয়। এর মধ্যে বেশ কিছু পূর্বনির্ধারিত ইমপ্লিমেন্টেশন যেমন FlatFileItemWriter এবং JdbcBatchItemWriter রয়েছে, কিন্তু প্রয়োজনে কাস্টম ItemWriter তৈরি করাও সম্ভব।
Read more