ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Batch 구현 - 7
    [공부] 프로그래밍/Spring・Spring Boot (JAVA) 2024. 5. 14. 12:46

     
    ♧ 전체 코드 : https://github.com/woodisco/pass-batch

    GitHub - woodisco/pass-batch

    Contribute to woodisco/pass-batch development by creating an account on GitHub.

    github.com

     

    REST API로 Job 실행시키기

    ① JobLauncherRequest 작성

    @Getter
    @Setter
    @ToString
    public class JobLauncherRequest {
        private String name;
        private Properties jobParameters;
    
        public JobParameters getJobParameters() {
            return new JobParametersBuilder((JobExplorer) this.jobParameters).toJobParameters();
        }
    }

     
    ② JobLauncherController 작성

    @RestController
    @RequestMapping("job")
    public class JobLauncherController {
        private final JobLauncher jobLauncher;
    
        private final JobRegistry jobRegistry;
    
        public JobLauncherController(JobLauncher jobLauncher, JobRegistry jobRegistry) {
            this.jobLauncher = jobLauncher;
            this.jobRegistry = jobRegistry;
        }
    
        @PostMapping("/launcher")
        public ExitStatus launchJob(@RequestBody JobLauncherRequest request) throws Exception {
    
            Job job = jobRegistry.getJob(request.getName());
            return this.jobLauncher.run(job, request.getJobParameters()).getExitStatus();
        }
    }
    1. JobLauncher
    JobLauncher는 Spring Batch에서 배치 작업(Job)을 실행하는 데 사용되는 인터페이스입니다. 쉽게 말해, 배치 작업을 시작하는 역할을 합니다.
    ・ 설명: 배치 작업은 보통 많은 데이터를 처리하거나 특정 시간에 반복적으로 실행되는 작업입니다. JobLauncher는 이러한 배치 작업을 트리거하고, 실행 결과를 반환합니다.
    ・ 사용 방법: JobLauncher를 사용하여 특정 배치 작업을 시작하려면 Job과 JobParameters를 전달해야 합니다.

    2. JobRegistry
    JobRegistry는 Spring Batch에서 모든 배치 작업(Job)을 등록하고 조회할 수 있는 저장소 역할을 합니다.
    ・ 설명: 여러 배치 작업이 있을 때, JobRegistry를 사용하면 특정 배치 작업을 쉽게 찾을 수 있습니다. JobRegistry는 각 Job을 이름으로 등록하고 관리합니다.
    ・ 사용 방법: 새로운 Job을 등록하거나 기존 Job을 조회할 때 사용합니다.

    3. ExitStatus
    ExitStatus는 Spring Batch에서 배치 작업(Job)의 실행 결과를 나타내는 클래스입니다. 작업이 성공적으로 완료되었는지, 실패했는지 등을 나타냅니다.
    ・ 설명: 배치 작업이 끝나면, ExitStatus를 통해 작업의 상태를 확인할 수 있습니다. 기본적으로 "COMPLETED", "FAILED" 등의 상태를 가집니다.
    ・ 사용 방법: 작업의 결과를 확인하거나, 후속 작업을 결정할 때 사용합니다.

     
    ③ BatchConfig 작성

    @EnableBatchProcessing
    @Configuration
    public class BatchConfig {
    
        /**
         * JobRegistry는 context에서 Job을 추적할 때 유용합니다.
         * JobRegistryBeanPostProcessor는 Application Context가 올라가면서 bean 등록 시, 자동으로 JobRegistry에 Job을 등록 시켜줍니다.
         */
        @Bean
        public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry) {
            JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
            jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry);
            return jobRegistryBeanPostProcessor;
    
        }
    }
    ※ JobRegistry는 컨텍스트에서 Job을 추척할 때 사용을 하는데, JobRegistryBeanPostProcessor를 등록해주어야 Job를 뽑아 사용 할 수 있다.

    1. JobRegistryBeanPostProcessor
    Spring Batch에서 사용되는 특별한 BeanPostProcessor입니다. Spring의 BeanPostProcessor 인터페이스를 구현하여, 콘텍스트 내의 Job들을 JobRegistry에 자동으로 등록하는 역할을 합니다. 

    ▷ 역할과 기능 
    ・ 자동 등록: Spring Batch 애플리케이션에서는 여러 개의 Job을 정의할 수 있습니다. JobRegistryBeanPostProcessor는 애플리케이션 콘텍스트가 초기화될 때 모든 Job 빈을 검색하고, 이를 JobRegistry에 자동으로 등록합니다. 
    ・ 관리 편의성: 이 프로세서는 JobRegistry에 Job을 수동으로 등록할 필요를 없애줍니다. 
    즉, 개발자는 Job을 정의하기만 하면, JobRegistryBeanPostProcessor가 이를 자동으로 처리해 주기 때문에 편리합니다.

     
    ④ application.yml 수정

    server:
      port: 8081
      
    batch:
        job:
          enabled: false # 기본값 true는 Spring Boot 실행 시 등록되어 있는 Job들이 실행됩니다.

     

    출처 : 패스트캠퍼스 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online

    '[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글

    비동기 프로그래밍 구현  (0) 2024.05.20
    Spring Multi Module 구현  (0) 2024.05.16
    Spring Batch 구현 - 6  (0) 2024.05.09
    Spring Batch 구현 - 5  (0) 2024.05.08
    Spring Batch 구현 - 4  (0) 2024.04.25
Designed by Tistory.