Spring Batch একটি ওপেন সোর্স, উচ্চক্ষমতাসম্পন্ন ফ্রেমওয়ার্ক যা batch processing এর জন্য ডিজাইন করা হয়েছে। এটি বিশেষভাবে বড় পরিমাণে ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়, যেমন বড় ডেটাসেটের ইনপুট, প্রক্রিয়াকরণ এবং আউটপুট। Spring Batch এর মাধ্যমে আপনি দ্রুত এবং দক্ষভাবে ETL (Extract, Transform, Load) অপারেশন করতে পারবেন।
Spring Batch প্রধানত business applications-এ ব্যবহৃত হয় যেখানে ডেটা একটি নির্দিষ্ট প্রক্রিয়া অনুসরণ করে বিশ্লেষণ করা, ফিল্টার করা বা ফরম্যাট করা হয়। এতে রয়েছে job processing, error handling, transaction management, reporting, এবং logging এর জন্য প্রয়োজনীয় টুলস।
Spring Batch এর মূল উপাদান
Spring Batch মূলত কিছু গুরুত্বপূর্ণ উপাদান দিয়ে গঠিত যা batch job প্রসেসিং করতে ব্যবহৃত হয়:
- Job:
- Job হলো এক ধরনের ব্যাচ প্রক্রিয়া, যা বিভিন্ন step নিয়ে গঠিত। প্রতিটি step একটি নির্দিষ্ট কাজ সম্পাদন করে। উদাহরণস্বরূপ, একটি Job ডেটা বের করা (extract), রূপান্তর করা (transform), এবং এটি ডেটাবেসে সংরক্ষণ করা (load) এর জন্য বিভিন্ন steps থাকতে পারে।
- Step:
- Step হলো Job এর একটি অংশ, যা একটি নির্দিষ্ট কাজ সম্পাদন করে। প্রতিটি step এর মধ্যে ItemReader, ItemProcessor, এবং ItemWriter থাকে।
- ItemReader:
- এটি ডেটা পড়ার জন্য ব্যবহৃত হয়। ItemReader ডেটা উৎস (যেমন, ডেটাবেস, ফাইল, বা অন্য কোন সোর্স) থেকে ডেটা এক্সট্র্যাক্ট করে।
- ItemProcessor:
- এটি ডেটাকে প্রক্রিয়া করার জন্য ব্যবহৃত হয়। ItemProcessor ডেটাকে পরবর্তী স্তরের জন্য প্রস্তুত করে (যেমন, ফিল্টার করা বা রূপান্তর করা)।
- ItemWriter:
- এটি প্রক্রিয়া করা ডেটা আউটপুটে লেখার জন্য ব্যবহৃত হয়। ItemWriter সাধারণত ডেটাবেস, ফাইল বা অন্য কোন ডেস্টিনেশন সিস্টেমে ডেটা লিখে।
- JobRepository:
- এটি সমস্ত JobExecution এবং StepExecution এর তথ্য স্টোর করে এবং ট্র্যাক করে, যাতে আপনি সেগুলোর সফলতা বা ব্যর্থতা জানতে পারেন।
- JobLauncher:
- এটি Job শুরু করতে ব্যবহৃত হয়। JobLauncher ব্যবহার করে আপনি একটি Job কে রান করাতে পারেন এবং এর ফলাফল দেখতে পারেন।
Spring Batch এর প্রয়োগ
Spring Batch প্রধানত বড় ডেটাসেটের প্রক্রিয়াকরণ এবং ETL (Extract, Transform, Load) কাজগুলির জন্য ব্যবহৃত হয়। এখানে কিছু practical use cases দেওয়া হল:
১. ডেটাবেস থেকে ডেটা এক্সট্র্যাক্ট করে ফাইল এ সংরক্ষণ:
- অনেক অ্যাপ্লিকেশন থাকে যেখানে ডেটাবেস থেকে ডেটা নিয়ে CSV বা XML ফরম্যাটে একটি ফাইল তৈরি করা হয়।
২. ডেটাবেস বা ফাইল থেকে ডেটা ট্রান্সফর্ম করা:
- ItemProcessor ব্যবহার করে ডেটাকে প্রক্রিয়া করে নির্দিষ্ট ফরম্যাটে রূপান্তর করা হয়।
৩. বড় ডেটাসেট ইনসার্ট বা আপডেট করা:
- Spring Batch-এর মাধ্যমে খুব দ্রুত বড় পরিমাণে ডেটাবেসে insert বা update অপারেশন করা যায়।
৪. রিপোর্ট জেনারেশন:
- নির্দিষ্ট ডেটা নিয়ে গ্রাফিকাল বা টেবুলার রিপোর্ট তৈরি করা যায়।
৫. ডেটা ভ্যালিডেশন:
- ডেটা ফিল্টার এবং ভ্যালিডেশন করা হয় যাতে শুধুমাত্র সঠিক ডেটা পরবর্তী প্রসেসে চলে যায়।
Spring Batch ব্যবহার করার উদাহরণ
ধরা যাক, আমাদের একটি সিম্পল Spring Batch job তৈরি করতে হবে যা একটি CSV ফাইল থেকে ডেটা পড়ে এবং তা database-এ ইনসার্ট করে।
১. Spring Batch Configuration Class
package com.example.config;
import org.springframework.batch.core.BatchStatus;
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.JobLauncher;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.scope.context.JobExecutionContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.transform.DefaultLineMapper;
import org.springframework.batch.item.file.transform.LineTokenizer;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.support.ListItemWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Bean
public FlatFileItemReader<User> reader() {
FlatFileItemReader<User> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("users.csv"));
reader.setLineMapper(new DefaultLineMapper<>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames("id", "name", "email");
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
setTargetType(User.class);
}});
}});
return reader;
}
@Bean
public ListItemWriter<User> writer() {
return new ListItemWriter<>();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("step1")
.<User, User>chunk(10)
.reader(reader())
.processor(new UserProcessor())
.writer(writer())
.build();
}
@Bean
public Job job(JobBuilderFactory jobBuilderFactory, Step step1) {
return jobBuilderFactory.get("job1")
.incrementer(new RunIdIncrementer())
.flow(step1)
.end()
.build();
}
@Bean
public JobLauncher jobLauncher(JobLauncher jobLauncher) {
return jobLauncher;
}
}
ব্যাখ্যা:
- FlatFileItemReader ব্যবহার করে
CSVফাইল থেকে ডেটা পড়া হয়। - ListItemWriter ব্যবহার করে ডেটা আউটপুট করা হয়, কিন্তু এখানে আপনি JdbcBatchItemWriter ব্যবহার করে ডেটাবেসে ইনসার্ট করতে পারবেন।
- Step এবং Job কনফিগারেশন করা হয় যাতে ডেটা চাঙ্ক আকারে প্রসেস করা যায়।
২. UserProcessor.java (ItemProcessor)
package com.example.processor;
import org.springframework.batch.item.ItemProcessor;
import com.example.model.User;
public class UserProcessor implements ItemProcessor<User, User> {
@Override
public User process(User item) throws Exception {
// Example of transforming data before writing to database
item.setName(item.getName().toUpperCase());
return item;
}
}
ব্যাখ্যা:
- ItemProcessor ব্যবহার করে ডেটা ট্রান্সফর্ম করা হয়। উদাহরণস্বরূপ, এখানে ইউজারের নাম uppercase-এ রূপান্তরিত করা হচ্ছে।
৩. User.java (Model Class)
package com.example.model;
public class User {
private Long id;
private String name;
private String email;
// getters and setters
}
৪. users.csv (Input Data)
1,John Doe,john.doe@example.com
2,Jane Smith,jane.smith@example.com
৫. Main Application
package com.example;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class BatchApplication {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Bean
public CommandLineRunner run(JobLauncher jobLauncher, Job job) {
return args -> {
jobLauncher.run(job, new JobParameters());
};
}
}
Spring Batch এর সুবিধা এবং প্রয়োগ
- Performance: Spring Batch দিয়ে বড় পরিমাণ ডেটা দ্রুত এবং কার্যকরীভাবে প্রক্রিয়া করা যায়।
- Scalability: এটি স্কেলেবল এবং উচ্চ লোডের অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।
- Error Handling: Spring Batch retry, skip, এবং compensation মেকানিজম প্রদান করে যাতে ভুল ডেটা প্রক্রিয়াকরণে পুনরায় চেষ্টা করা যায়।
- Transaction Management: এটি ডেটাবেস ট্রানজেকশন পরিচালনা করে এবং ডেটার অখণ্ডতা নিশ্চিত করে।
- Integration: Spring Batch অন্যান্য ফ্রেমওয়ার্ক যেমন Spring Data, JDBC, Hibernate, এবং JMS এর সাথে সহজে ইন্টিগ্রেট হতে পারে।
সারাংশ
Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা বৃহৎ আকারের ডেটা প্রক্রিয়াকরণ, ETL অপারেশন এবং ব্যাচ প্রসেসিং সহজ এবং দক্ষভাবে পরিচালনা করতে ব্যবহৃত হয়। এটি ItemReader, ItemProcessor, ItemWriter, Job এবং Step ব্যবহারের মাধ্যমে ডেটা এক্সট্র্যাকশন, ট্রান্সফরমেশন এবং লোডিং প্রক্রিয়াগুলিকে মডুলার এবং স্কেলেবল করে তোলে। Spring Batch
Read more