উদাহরণ সহ Rest API এবং Spring Batch Integration

Spring Batch এবং Rest API Integration - স্প্রিং ব্যাচ (Spring Batch) - Java Technologies

330

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 এর মাধ্যমে আমরা ব্যাচ জবের কার্যকলাপ মনিটর করতে পারি।

Content added By
Promotion

Are you sure to start over?

Loading...