Spring Batch এবং REST API এর মধ্যে ইন্টিগ্রেশন একটি শক্তিশালী কৌশল, যা ডেটা প্রক্রিয়াকরণ এবং রিপোর্টিংয়ের জন্য ব্যবহৃত হয়। Spring Batch ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হলেও, REST API এর মাধ্যমে আপনি এই ব্যাচ জব গুলি ট্রিগার করতে, তাদের স্ট্যাটাস মনিটর করতে এবং ফলাফল রিটার্ন করতে পারেন।
এই উদাহরণে, আমরা দেখবো কিভাবে Spring Batch জব এবং স্টেপগুলোকে REST API এর মাধ্যমে এক্সিকিউট করতে হয় এবং তাদের স্ট্যাটাস ফেচ করা যায়।
Spring Batch এবং REST API Integration এর ধাপ:
১. Spring Boot অ্যাপ্লিকেশন সেটআপ
প্রথমে, Spring Boot অ্যাপ্লিকেশন তৈরি করতে হবে এবং প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
pom.xml এ Spring Boot Starter এবং Spring Batch ডিপেনডেন্সি যোগ করুন:
<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.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<!-- Spring Boot Starter Data JPA for Database Connectivity -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- H2 Database (or any other DB you choose) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot Starter Actuator for Monitoring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Spring Boot Starter for RESTful services -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
</dependencies>
২. Batch Job এবং Step কনফিগারেশন
Spring Batch এর জন্য একটি সিম্পল ItemProcessor, ItemReader, এবং ItemWriter কনফিগার করা হবে। এছাড়া, একটি Step এবং Job তৈরি করা হবে।
Step এবং Job কনফিগারেশন
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<String, String>chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
@Bean
public Job job() {
return jobBuilderFactory.get("batchJob")
.start(step1())
.build();
}
@Bean
public ItemReader<String> itemReader() {
return new ItemReader<String>() {
private List<String> data = Arrays.asList("Item1", "Item2", "Item3", "Item4", "Item5");
private int index = 0;
@Override
public String read() throws Exception {
if (index < data.size()) {
return data.get(index++);
} else {
return null;
}
}
};
}
@Bean
public ItemProcessor<String, String> itemProcessor() {
return new ItemProcessor<String, String>() {
@Override
public String process(String item) throws Exception {
return "Processed: " + item;
}
};
}
@Bean
public ItemWriter<String> itemWriter() {
return new ItemWriter<String>() {
@Override
public void write(List<? extends String> items) throws Exception {
for (String item : items) {
System.out.println(item);
}
}
};
}
}
৩. REST API Controller তৈরি
এখন, আমরা একটি REST API Controller তৈরি করবো যা Spring Batch Job টিকে ট্রিগার করবে এবং তার স্ট্যাটাস পাবে। Spring Batch Job গুলো REST API এর মাধ্যমে run করা হবে।
@RestController
@RequestMapping("/batch")
public class BatchController {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@PostMapping("/start")
public ResponseEntity<String> startBatchJob() {
try {
JobExecution jobExecution = jobLauncher.run(job, new JobParameters());
return new ResponseEntity<>("Batch Job started with JobExecution ID: " + jobExecution.getId(), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>("Error starting batch job: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@GetMapping("/status/{jobExecutionId}")
public ResponseEntity<String> getJobExecutionStatus(@PathVariable Long jobExecutionId) {
JobExecution jobExecution = jobRepository.getJobExecution(jobExecutionId);
if (jobExecution == null) {
return new ResponseEntity<>("Job execution not found.", HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>("Job Execution Status: " + jobExecution.getStatus(), HttpStatus.OK);
}
}
ব্যাখ্যা:
- POST /batch/start: এই API কলের মাধ্যমে Spring Batch Job শুরু হবে।
jobLauncher.run(job, new JobParameters())দিয়ে Job রান করা হয় এবং JobExecution ID রিটার্ন করা হয়। - GET /batch/status/{jobExecutionId}: এই API কলের মাধ্যমে আপনি একটি নির্দিষ্ট JobExecution এর স্ট্যাটাস জানতে পারবেন। JobExecution এর স্ট্যাটাস যেমন
COMPLETED,FAILEDবাSTARTEDহতে পারে।
৪. Spring Batch Job Execution History এবং Status ট্র্যাক করা
Spring Batch Job Execution History এবং Status ট্র্যাক করার জন্য, Spring Batch ডিফল্টভাবে JobRepository ব্যবহার করে, যা JobExecution এবং StepExecution মেটাডেটা সংরক্ষণ করে। এই মেটাডেটা ব্যবহার করে আপনি ব্যাচ জবের ইতিহাস এবং স্ট্যাটাস মনিটর করতে পারবেন।
উদাহরণ: Job Execution History ব্যবহার
@Autowired
private JobRepository jobRepository;
public void logJobExecutionDetails(Long jobExecutionId) {
JobExecution jobExecution = jobRepository.getJobExecution(jobExecutionId);
System.out.println("Job name: " + jobExecution.getJobInstance().getJobName());
System.out.println("Job status: " + jobExecution.getStatus());
System.out.println("Job start time: " + jobExecution.getStartTime());
System.out.println("Job end time: " + jobExecution.getEndTime());
System.out.println("Job failure exceptions: " + jobExecution.getAllFailureExceptions());
}
৫. JobRepository Integration
Spring Batch ব্যবহার করার মাধ্যমে ব্যাচ জবের execution history সরাসরি JobRepository তে সংরক্ষিত থাকে। এটি ডাটাবেসের টেবিলগুলিতে স্টোর করা হয় এবং এখান থেকে আপনি Job এর execution history, status, failure details ইত্যাদি পর্যালোচনা করতে পারেন।
৬. Spring Batch Actuator (Optional)
Spring Batch Actuator ব্যবহার করে আপনি আরও উন্নত মনিটরিং করতে পারেন, যা বিভিন্ন Batch Job এবং Step এর স্ট্যাটাস, স্লিপ টাইম, এবং রান টাইম সংক্রান্ত ডেটা প্রদান করে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
এটি Spring Boot Actuator এর মত কাজ করবে এবং আপনাকে ব্যাচ জবের জন্য metrics, health checks, এবং job details প্রদান করবে।
সারাংশ
Spring Batch এবং REST API এর মধ্যে ইন্টিগ্রেশন সহজভাবে ব্যাচ প্রক্রিয়াগুলিকে ওয়েব অ্যাপ্লিকেশন বা অন্য ক্লায়েন্ট অ্যাপ্লিকেশনের মাধ্যমে পরিচালনা করতে সহায়তা করে। REST API ব্যবহার করে Spring Batch Job শুরু করা এবং তার স্ট্যাটাস মনিটর করা যেতে পারে। JobLauncher, JobRepository, এবং JobExecution এর মাধ্যমে আমরা ব্যাচ জব এবং স্টেপের কার্যক্রম ট্র্যাক করতে পারি। এছাড়া, Spring Batch Actuator এবং JobExecutionListener এর মাধ্যমে আমরা ব্যাচ জবের কার্যকলাপ মনিটর করতে পারি।
Read more