Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা বৃহৎ পরিমাণ ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। একাধিক স্টেপ এবং আইটেম প্রসেসিং এক্সিকিউশনের মাধ্যমে ডেটা ফাইল, ডেটাবেস অথবা অন্যান্য আউটপুট সোর্সে লেখা (write) যায়। Spring Batch এ ডেটা লেখার জন্য ItemWriter ইন্টারফেস ব্যবহৃত হয়, যা ডেটা প্রক্রিয়া করার পর আউটপুট সোর্সে লেখা নিশ্চিত করে।
এখানে, আমরা Custom ItemWriter তৈরি করার প্রক্রিয়া নিয়ে আলোচনা করব। ItemWriter সাধারণত ItemProcessor এর পরবর্তী ধাপ হিসাবে কাজ করে এবং ডেটা ফাইল, ডেটাবেস বা অন্য কোনও আউটপুট টার্গেটে লেখার দায়িত্ব নেয়।
ItemWriter Interface
Spring Batch এ ItemWriter ইন্টারফেস একটি প্রধান উপাদান, যা আইটেমগুলিকে আউটপুট সোর্সে (যেমন ফাইল বা ডেটাবেস) লেখার জন্য ব্যবহৃত হয়। এটি সাধারণত ব্যাচ প্রসেসিং ফ্লোতে একাধিক আইটেম একসাথে লেখার জন্য ব্যবহৃত হয়।
ItemWriter ইন্টারফেসে একটি একমাত্র মেথড আছে:
void write(List<? extends T> items) throws Exception;
- items: এটি একটি তালিকা বা সংগ্রহ (Collection), যা ডেটা প্রসেসিংয়ের পরে লেখার জন্য প্রস্তুত থাকে।
- Exception: যদি লেখার সময় কোনো ত্রুটি ঘটে, তাহলে এটি একটি এক্সসেপশন রিটার্ন করবে।
Custom ItemWriter তৈরি করা
Spring Batch এ একটি Custom ItemWriter তৈরি করতে হলে আপনাকে ItemWriter ইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে এবং তার মধ্যে write() মেথডটি কাস্টমভাবে বাস্তবায়ন করতে হবে। এখানে আমরা একটি উদাহরণ দেখাব, যেখানে একটি Custom ItemWriter ডেটা একটি সিম্পল ফাইল (টেক্সট ফাইল) এ লিখবে।
Custom ItemWriter উদাহরণ: ডেটা ফাইল এ লেখা
ধরা যাক, আমাদের একটি ItemWriter তৈরি করতে হবে যা একটি List আইটেমকে একটি টেক্সট ফাইলে লিখবে।
import org.springframework.batch.item.ItemWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class FileItemWriter implements ItemWriter<String> {
private String outputFile;
public FileItemWriter(String outputFile) {
this.outputFile = outputFile;
}
@Override
public void write(List<? extends String> items) throws Exception {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile, true))) {
for (String item : items) {
writer.write(item);
writer.newLine(); // একেকটি আইটেম নতুন লাইনে লেখা হবে
}
} catch (IOException e) {
throw new Exception("Error writing to file", e);
}
}
}
এখানে:
FileItemWriterক্লাসটিItemWriterইন্টারফেস ইমপ্লিমেন্ট করেছে।write()মেথডেList<String>আইটেমগুলো টেক্সট ফাইলে লেখার জন্যBufferedWriterব্যবহার করা হয়েছে।- ফাইলটি অতিরিক্ত লেখা এড়াতে (append mode)
trueব্যবহার করা হয়েছে। IOExceptionহলে সেই এক্সসেপশনটি পুনরায় ছুড়ে দেওয়া হয়েছে।
ItemWriter কে Step এ ব্যবহার করা
এখন, আমরা আমাদের Custom ItemWriter কে একটি Step এর মধ্যে ব্যবহার করব, যা Spring Batch Job এর একটি অংশ হিসেবে কাজ করবে। Step এ ItemWriter সাধারণত ItemReader এবং ItemProcessor এর সাথে ব্যবহৃত হয়।
Step তৈরি করা
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job myJob() {
return jobBuilderFactory.get("myJob")
.start(myStep())
.build();
}
@Bean
public Step myStep() {
return stepBuilderFactory.get("myStep")
.<String, String>chunk(10) // প্রতি 10টি আইটেমে চাঙ্ক
.reader(myItemReader())
.processor(myItemProcessor())
.writer(myItemWriter()) // Custom ItemWriter ব্যবহার করা হয়েছে
.build();
}
@Bean
public ItemReader<String> myItemReader() {
return new MyItemReader(); // এই উদাহরণে আইটেম রিডার কাস্টম
}
@Bean
public ItemProcessor<String, String> myItemProcessor() {
return new MyItemProcessor(); // প্রসেসিংয়ের জন্য কাস্টম প্রসেসর
}
@Bean
public ItemWriter<String> myItemWriter() {
return new FileItemWriter("output.txt"); // Custom FileItemWriter
}
}
এখানে:
myStep()এর মধ্যে আমাদের CustomItemWriter(FileItemWriter) ব্যবহার করা হয়েছে।chunk(10)এর মাধ্যমে প্রতি ১০টি আইটেমের পর ItemWriter কে কল করা হবে।
ItemWriter এর ব্যবহার ক্ষেত্র
Custom ItemWriter সাধারণত ব্যবহার করা হয় যখন:
- আপনাকে একটি কাস্টম আউটপুট টার্গেটে ডেটা লিখতে হয়, যেমন ফাইল, ডেটাবেস, বা অন্যান্য আউটপুট মিডিয়া।
- বৃহৎ পরিমাণ ডেটাকে একত্রে (batch) লেখা হয়।
- ডেটা লেখার জন্য কোনো নির্দিষ্ট লজিক প্রয়োগ করতে হয়, যেমন ফাইলের মধ্যে নির্দিষ্ট ফরম্যাটে ডেটা লেখা বা বিশেষ কোনো এক্সটেনশন সহ ফাইল তৈরি করা।
সারাংশ
Spring Batch এ ItemWriter একটি গুরুত্বপূর্ণ উপাদান যা আইটেমগুলো আউটপুট সোর্সে লেখার জন্য ব্যবহৃত হয়। ItemWriter ইন্টারফেস কাস্টম করে, আপনি যেকোনো আউটপুট সোর্সে ডেটা লেখার জন্য একটি কাস্টম লজিক তৈরি করতে পারেন। এই লেখার প্রক্রিয়া ItemReader এবং ItemProcessor এর সাথে একত্রে কাজ করে একটি ব্যাচ প্রসেসিং ফ্লো তৈরি করতে সহায়তা করে। একটি Custom ItemWriter তৈরি করে আপনি ব্যাচ ডেটা প্রসেসিংকে আরও কাস্টমাইজড এবং কার্যকরীভাবে ব্যবহার করতে পারেন।
Read more