স্প্রিং ব্যাচ (Spring Batch) একটি ফ্রেমওয়ার্ক যা বড় পরিমাণে ডেটা প্রোসেসিংয়ের জন্য ব্যবহৃত হয়। এটি বিশেষভাবে ব্যাচ প্রসেসিং, যেমন ডেটা মাইগ্রেশন, ডেটা ট্রান্সফরমেশন এবং ডেটা লোডিং, ইত্যাদির জন্য উপযুক্ত। স্প্রিং ব্যাচ একটি মডুলার আর্কিটেকচার ব্যবহার করে, যা অনেক কমপোনেন্ট দিয়ে গঠিত এবং এগুলো একে অপরের সাথে ইন্টিগ্রেটেডভাবে কাজ করে। স্প্রিং ব্যাচের আর্কিটেকচার মূলত তিনটি প্রধান অংশে বিভক্ত: Job, Step, এবং ItemProcessor।
এখানে আমরা স্প্রিং ব্যাচের আর্কিটেকচার এবং এর গুরুত্বপূর্ণ কম্পোনেন্টগুলো উদাহরণের মাধ্যমে বিশ্লেষণ করবো।
স্প্রিং ব্যাচ আর্কিটেকচারের প্রধান কম্পোনেন্টগুলো
স্প্রিং ব্যাচের আর্কিটেকচারে মূলত নিচের কম্পোনেন্টগুলো থাকে:
- Job: এটি একটি ব্যাচ প্রসেসিং কাজের ইউনিট। একটি
Jobএকটি বা একাধিকStepনিয়ে গঠিত, এবং প্রতিটিStepএকটি নির্দিষ্ট কাজ সম্পন্ন করে। - Step:
Stepহলো ব্যাচ প্রসেসিংয়ের একক কার্যক্রম। এটি বিভিন্ন ধাপে বিভক্ত হতে পারে, যেমন রিডিং (reading), প্রসেসিং (processing), এবং রাইটিং (writing)। - ItemReader: এটি ডেটা রিডিংয়ের জন্য ব্যবহৃত হয়, অর্থাৎ একটি সিঙ্গেল আইটেম বা ডেটা সোর্স থেকে এক্সট্র্যাক্ট করা হয়।
- ItemProcessor: এটি ডেটার উপর কোনো প্রক্রিয়া বা ট্রান্সফরমেশন সম্পন্ন করে।
- ItemWriter: এটি প্রক্রিয়াকৃত ডেটাকে কোথাও (যেমন ডেটাবেস, ফাইল) লিখে রাখে।
- JobLauncher: এটি একটি
Jobশুরু করার জন্য ব্যবহৃত হয়।
স্প্রিং ব্যাচের কাজের প্রক্রিয়া সাধারণত নিচের রূপে কাজ করে:
- Job তৈরি করা হয়, যা এক বা একাধিক
Stepনিয়ে গঠিত। - প্রতিটি
Stepএকটি নির্দিষ্ট কাজ সম্পন্ন করে, যেমন ডেটা রিড, প্রসেস এবং রাইট। ItemReaderডেটা রিডিং করে,ItemProcessorডেটা প্রসেস করে এবংItemWriterডেটাকে আউটপুট ডেস্টিনেশনে (যেমন ডেটাবেস, ফাইল, ইত্যাদি) লেখে।
স্প্রিং ব্যাচ আর্কিটেকচারের উদাহরণ
এখন আমরা একটি উদাহরণ দেখব যেখানে আমরা একটি ব্যাচ জব তৈরি করবো, যেটি একটি CSV ফাইল থেকে ডেটা পড়বে, ডেটাকে প্রসেস করবে এবং তা ডেটাবেসে লেখবে।
Step 1: স্প্রিং ব্যাচ কনফিগারেশন
প্রথমে আমাদের @EnableBatchProcessing অ্যানোটেশন দিয়ে স্প্রিং ব্যাচ কনফিগারেশন সক্ষম করতে হবে।
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
@Bean
public ItemReader<User> reader() {
FlatFileItemReader<User> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("users.csv"));
reader.setLineMapper(new DefaultLineMapper<User>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames("id", "name", "email");
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
setTargetType(User.class);
}});
}});
return reader;
}
@Bean
public ItemProcessor<User, User> processor() {
return new UserItemProcessor();
}
@Bean
public ItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
writer.setSql("INSERT INTO users (id, name, email) VALUES (:id, :name, :email)");
writer.setDataSource(dataSource);
return writer;
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<User, User> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job importUserJob() {
return jobBuilderFactory.get("importUserJob")
.start(step1())
.build();
}
@Bean
public JobLauncher jobLauncher(JobRegistry jobRegistry) {
return new SimpleJobLauncher();
}
}
Step 2: ItemProcessor (ডেটা প্রসেসিং)
এখানে একটি UserItemProcessor ক্লাস তৈরি করা হয়েছে, যা ডেটা প্রসেস করে।
public class UserItemProcessor implements ItemProcessor<User, User> {
@Override
public User process(User user) throws Exception {
user.setName(user.getName().toUpperCase()); // Name কে uppercase এ পরিবর্তন করা হচ্ছে
return user;
}
}
Step 3: ডেটাবেস মডেল (User)
এখন, আমাদের একটি User ক্লাস তৈরি করতে হবে, যেটি ডেটাবেসে সেভ করা হবে।
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
স্প্রিং ব্যাচের কাজের প্রক্রিয়া
- ItemReader: প্রথমে
ItemReaderসিস্টেম CSV ফাইল থেকে ডেটা রিড করে। এখানে,FlatFileItemReaderব্যবহার করা হচ্ছে, যা ফাইল থেকে লাইন পড়বে এবং প্রতিটি লাইনের ডেটাকেUserঅবজেক্টে ম্যাপ করবে। - ItemProcessor:
ItemProcessorডেটার উপর কোনো প্রক্রিয়া বা ট্রান্সফরমেশন করে। আমাদের উদাহরণে, এটিUserঅবজেক্টের নামকে uppercase-এ রূপান্তর করে। - ItemWriter:
ItemWriterপ্রসেস করা ডেটাকে একটি ডেটাবেসে লেখে। এখানে,JdbcBatchItemWriterব্যবহার করা হয়েছে, যা ডেটাকে ডেটাবেসে ইনসার্ট করবে। - Job and Step: একটি
Jobতৈরি করা হয়, যার মধ্যে একটি বা একাধিকStepথাকে। এখানে, আমরা একটিstep1তৈরি করেছি, যা ডেটা রিড, প্রসেস এবং রাইটিংয়ের জন্য দায়ী। - JobLauncher:
JobLauncherব্যবহার করে আমরাJobশুরু করি। এটি ব্যাচ প্রসেসিংয়ের কার্যক্রম শুরু করবে।
উপসংহার
স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক, যা ব্যাচ প্রক্রিয়াকরণ, যেমন ডেটা ট্রান্সফরমেশন, লোডিং, এবং মাইগ্রেশন কাজগুলোকে সহজ করে তোলে। এর আর্কিটেকচার প্রধানত Job, Step, ItemReader, ItemProcessor, এবং ItemWriter এর চারপাশে গড়ে ওঠে। স্প্রিং ব্যাচের সাহায্যে আপনি বড় পরিমাণের ডেটা প্রক্রিয়া, ভ্যালিডেশন এবং রাইটিং কাজগুলো দক্ষভাবে পরিচালনা করতে পারবেন।
Read more