Spring Batch একটি পাওয়ারফুল ফ্রেমওয়ার্ক যা বড় আকারের ডেটা প্রসেসিং (যেমন, ব্যাচ প্রসেসিং) পরিচালনা করতে ব্যবহৃত হয়। এটি এমন কাজের জন্য ডিজাইন করা হয়েছে যেখানে ডেটা সিকোয়েন্সিয়ালভাবে প্রসেস করা হয়, যেমন ডেটাবেস থেকে ডেটা রিড করা, ডেটা প্রোসেস করা, এবং ডেটাবেসে বা অন্য কোনো স্টোরেজে রাইট করা।
এখানে একটি Hello World Batch Example তৈরি করা হবে, যা Spring Batch ব্যবহার করে একটি ব্যাচ প্রসেস তৈরি করবে।
1. প্রয়োজনীয় ডিপেনডেন্সি ইনস্টল করা
Spring Batch অ্যাপ্লিকেশনে কাজ করার জন্য প্রথমে spring-boot-starter-batch ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে। যদি আপনি ডেটাবেস ব্যবহার করতে চান, তাহলে spring-boot-starter-data-jpa এবং ডেটাবেস ড্রাইভারও যোগ করতে হবে।
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Batch -->
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
</dependency>
<!-- Spring Boot Starter Data JPA for database integration (optional) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Database driver (e.g., H2, MySQL, PostgreSQL) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
এখানে, spring-batch-core ডিপেনডেন্সি Spring Batch এর মূল কার্যকারিতা প্রদান করে। যদি আপনি ডেটাবেস ব্যবহার করেন, তাহলে spring-boot-starter-data-jpa এবং একটি ডেটাবেস ড্রাইভার (এখানে H2 ডাটাবেস ব্যবহৃত হচ্ছে) যুক্ত করতে হবে।
2. Spring Batch কনফিগারেশন
Spring Batch কনফিগারেশনে Job এবং Step তৈরি করা হয়। একটি Job একটি ব্যাচ প্রসেস এবং এক বা একাধিক Step দিয়ে গঠিত। প্রতিটি Step একটি নির্দিষ্ট কাজ সম্পাদন করে, যেমন ডেটা রিড করা, প্রোসেস করা, এবং রাইট করা।
2.1 Batch Job কনফিগারেশন ক্লাস
package com.example.helloworld.batch;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.JobExecutionException;
import org.springframework.batch.core.JobExecution;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public class BatchConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job helloWorldJob() {
return jobBuilderFactory.get("helloWorldJob")
.incrementer(new RunIdIncrementer())
.start(helloWorldStep())
.build();
}
@Bean
public Step helloWorldStep() {
return stepBuilderFactory.get("helloWorldStep")
.<String, String>chunk(1) // Process 1 item at a time
.reader(new HelloWorldReader())
.processor(new HelloWorldProcessor())
.writer(new HelloWorldWriter())
.build();
}
public static void main(String[] args) throws JobExecutionException {
JobLauncher jobLauncher = new JobLauncher(); // Initialize JobLauncher
JobExecution execution = jobLauncher.run(helloWorldJob(), new JobParameters());
System.out.println("Job Status : " + execution.getStatus());
}
}
এখানে:
@EnableBatchProcessing: Spring Batch প্রসেসিং সক্ষম করে।Job: একটি ব্যাচ প্রসেস (এখানেhelloWorldJob), যা একটি Step দিয়ে গঠিত।Step:helloWorldStepনামে একটি Step তৈরি করা হয়েছে, যা reader, processor, এবং writer এর মাধ্যমে কাজ সম্পন্ন করে।
3. Reader, Processor, এবং Writer তৈরি করা
Spring Batch এ প্রতিটি Step তিনটি প্রধান কম্পোনেন্ট দিয়ে গঠিত:
- Reader: এটি ডেটা পড়ার কাজ করে (যেমন, ডেটাবেস বা ফাইল থেকে ডেটা রিড করা)।
- Processor: এটি ডেটা প্রোসেসিং করে (যেমন, রূপান্তর বা ফিল্টার করা)।
- Writer: এটি ডেটা সঞ্চয় (যেমন, ডেটাবেস বা ফাইলে ডেটা রাইট করা)।
3.1 Reader তৈরি করা
package com.example.helloworld.batch;
import org.springframework.batch.item.ItemReader;
public class HelloWorldReader implements ItemReader<String> {
private String[] data = {"Hello", "World", "from", "Spring", "Batch"};
private int count = 0;
@Override
public String read() {
if (count < data.length) {
return data[count++];
}
return null; // When data ends
}
}
এখানে, HelloWorldReader একটি ইমপ্লিমেন্টেশন যা একটি অ্যারে থেকে ডেটা পড়ে।
3.2 Processor তৈরি করা
package com.example.helloworld.batch;
import org.springframework.batch.item.ItemProcessor;
public class HelloWorldProcessor implements ItemProcessor<String, String> {
@Override
public String process(String item) throws Exception {
return item.toUpperCase(); // Convert to uppercase
}
}
এখানে, HelloWorldProcessor প্রতিটি String কে uppercase তে রূপান্তরিত করে।
3.3 Writer তৈরি করা
package com.example.helloworld.batch;
import org.springframework.batch.item.ItemWriter;
import java.util.List;
public class HelloWorldWriter implements ItemWriter<String> {
@Override
public void write(List<? extends String> items) throws Exception {
for (String item : items) {
System.out.println(item); // Print each item to console
}
}
}
এখানে, HelloWorldWriter প্রতিটি প্রোসেস করা String কনসোলে প্রিন্ট করে।
4. অ্যাপ্লিকেশন চালানো
Spring Batch অ্যাপ্লিকেশন চালাতে, BatchConfig ক্লাসে main() মেথড কল করে JobLauncher এবং JobExecution ব্যবহার করা হয়েছে। এইভাবে ব্যাচ প্রোগ্রামটি শুরু হবে এবং প্রতিটি String কে uppercase করে কনসোলে প্রিন্ট করা হবে।
4.1 JobExecution Console Output
যখন আপনি এই অ্যাপ্লিকেশনটি চালাবেন, কনসোলে এই ধরনের আউটপুট দেখাবে:
HELLO
WORLD
FROM
SPRING
BATCH
সারাংশ
Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিং কাজগুলো সহজ করে তোলে। একটি Hello World উদাহরণে আমরা দেখলাম কিভাবে Spring Batch ব্যবহার করে একটি Job এবং Step কনফিগার করা যায়। এতে ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করে ডেটা রিড, প্রোসেস এবং রাইট করা হয়েছে। Spring Batch সহজে বড় ডেটাসেট এবং ব্যাচ প্রসেসিং কাজগুলো পরিচালনা করতে সহায়তা করে।
Read more