Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা বড় আকারের ডেটা প্রক্রিয়া (batch processing) করার জন্য ব্যবহৃত হয়। Job Spring Batch-এ একটি কেন্দ্রীয় কনসেপ্ট, যা একটি বা একাধিক Step এর মাধ্যমে ডেটা প্রক্রিয়া সম্পন্ন করে। Job হলো এক ধরনের কাজ যা ডেটা এক্সট্র্যাকশন, ট্রান্সফরমেশন এবং লোডিং (ETL) কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়।
Spring Batch এ Job এর সংজ্ঞা
Job হলো একটি টাস্ক যা বিভিন্ন কাজ বা Step নিয়ে গঠিত। প্রতিটি Step ডেটা প্রক্রিয়া বা কোনো নির্দিষ্ট কাজ সম্পাদন করে। Job এ কয়েকটি Step থাকতে পারে এবং প্রতিটি Step তার নিজস্ব কাজ (যেমন, ডেটা রিড, প্রসেস, বা রাইট) সম্পন্ন করে। Job সাধারণত একটি হাই-লেভেল প্রক্রিয়া, যা এর ভিতরে থাকা স্টেপগুলির কার্যকারিতা একত্রিত করে।
Job এর মূল উপাদান:
- Step: Job-এর অংশ যা নির্দিষ্ট কাজ সম্পাদন করে (যেমন, ডেটা রিড, প্রসেস বা রাইট)। প্রতিটি Step আলাদাভাবে কার্যকরী হতে পারে এবং তার নিজস্ব ইনপুট ও আউটপুট থাকতে পারে।
- ItemReader, ItemProcessor, ItemWriter: Step-এর মধ্যে ডেটা রিড, প্রসেস এবং রাইট করার জন্য ব্যবহৃত উপাদান।
Spring Batch এ Job এর কাজের প্রক্রিয়া
Spring Batch এ Job সাধারণত তিনটি মূল ধাপে কাজ করে:
- Job Execution: Job শুরু হওয়ার পরে এক বা একাধিক Step একে একে কার্যকরী হয়।
- Step Execution: প্রতিটি Step ডেটা প্রক্রিয়া করার জন্য একটি নির্দিষ্ট কার্যপ্রণালী সম্পাদন করে।
- Job Completion: সব Step সম্পন্ন হলে Job সফলভাবে বা ব্যর্থভাবে শেষ হয়।
Job এর কাজের প্রক্রিয়া: বিস্তারিত বর্ণনা
- Job Configuration:
প্রথমে একটি Job কনফিগার করা হয়, যাতে Job-এর ভেতরে বিভিন্ন Step থাকে। প্রতিটি Step এর মধ্যে একটি নির্দিষ্ট কার্যকলাপ (ItemReader, ItemProcessor, ItemWriter) নির্ধারিত হয়। Job এবং Step গুলি JobLauncher দিয়ে রান করা হয়। - Step Execution:
প্রতিটি Step নিজস্ব কাজ শুরু করার আগে তার নির্দিষ্ট কনফিগারেশন বা ডেটা প্রস্তুতি গ্রহণ করে। Step সাধারণত নিম্নলিখিত স্টেপগুলির মাধ্যমে কাজ করে:- ItemReader: Step প্রথমে ডেটা রিড করে (যেমন, ডেটাবেস থেকে, ফাইল থেকে বা অন্য কোনো উৎস থেকে)।
- ItemProcessor: পরে এই রিড করা ডেটার উপর প্রক্রিয়া (transform) করা হয়।
- ItemWriter: শেষে, প্রসেস করা ডেটা কোথাও (যেমন, ডেটাবেস, ফাইল) রাইট করা হয়।
- Job Completion:
সব Step সফলভাবে সম্পন্ন হলে, Job সম্পন্ন হয়ে যায় এবং JobExecution এর স্ট্যাটাস "COMPLETED" হয়ে যায়। যদি কোনো Step ব্যর্থ হয়, তাহলে JobExecution এর স্ট্যাটাস "FAILED" হয়ে যায়।
Spring Batch এ Job এর উদাহরণ
ধরা যাক, আমাদের একটি Job তৈরি করতে হবে যা একটি CSV ফাইল থেকে ডেটা পড়ে, তা প্রসেস করে এবং ডেটাবেসে সেভ করে।
১. Job Configuration:
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
@Bean
public FlatFileItemReader<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<User>() {{
setTargetType(User.class);
}});
}});
return reader;
}
@Bean
public ItemProcessor<User, User> processor() {
return new UserItemProcessor();
}
@Bean
public ItemWriter<User> writer() {
return new JdbcBatchItemWriterBuilder<User>()
.dataSource(dataSource)
.sql("INSERT INTO user (id, name, email) VALUES (:id, :name, :email)")
.beanMapped()
.build();
}
@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")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
}
২. ItemProcessor Class:
public class UserItemProcessor implements ItemProcessor<User, User> {
@Override
public User process(User item) throws Exception {
// নাম ক্যাপিটালাইজ করুন
item.setName(item.getName().toUpperCase());
return item;
}
}
৩. User Entity:
public class User {
private Long id;
private String name;
private String email;
// Getters and Setters
}
৪. CSV File (users.csv):
1,John,john@example.com
2,Jane,jane@example.com
3,David,david@example.com
Job Execution Process
- Job Initialization:
importUserJobJob তৈরি হয় এবং এটি একটি Step এর মধ্যে চলবে (এখানে Step1)। Job Execution শুরু হয়। - Step Execution:
Step1 শুরু হয়, যেখানেItemReaderCSV ফাইল থেকে ডেটা রিড করে,ItemProcessorডেটাকে প্রসেস করে (নামকে ক্যাপিটালাইজ করে), এবংItemWriterডেটাবেসে সেভ করে। - Job Completion:
Step1 সম্পন্ন হলে, Job শেষ হয়ে যায়। যদি Step সফল হয়, Job Execution সফলভাবে "COMPLETED" স্ট্যাটাস পায়, এবং কোনো ত্রুটি হলে "FAILED" স্ট্যাটাস দেখা যাবে।
Job Execution এবং Job Parameters
Spring Batch Job একটি JobParameters অবজেক্ট গ্রহণ করে, যার মাধ্যমে Job এর কনফিগারেশন প্যারামিটার পাঠানো যায়। উদাহরণস্বরূপ, যদি Jobটি ফাইলের নাম বা কোনো ডেটাবেস টেবিলের নাম গ্রহণ করে, তাহলে সেগুলো JobParameters এর মাধ্যমে পাস করা হয়।
JobParameters jobParameters = new JobParametersBuilder()
.addString("sourceFile", "input.csv")
.toJobParameters();
jobLauncher.run(importUserJob, jobParameters);
সারাংশ
Spring Batch এ Job একটি বা একাধিক Step এর মাধ্যমে এক বা একাধিক টাস্ক সম্পাদন করে। প্রতিটি Step ডেটা রিড, প্রসেস এবং রাইটের মতো নির্দিষ্ট কাজ সম্পন্ন করে। Spring Batch অত্যন্ত শক্তিশালী এবং কার্যকরী ফ্রেমওয়ার্ক যা বড় পরিমাণ ডেটা প্রসেস করতে ব্যবহৃত হয় এবং Job এবং Step গুলোর মাধ্যমে ডেটা ট্রান্সফরমেশন, লোডিং এবং এক্সট্র্যাকশনের কাজ সম্পাদন করা হয়। Spring Batch ব্যবহার করে ETL প্রসেস, ডেটা মাইগ্রেশন, রিপোর্টিং এবং বিলিং সিস্টেমের মতো কার্যক্রম সহজে এবং দক্ষতার সাথে সম্পাদন করা যায়।
Read more