package com.spring.infra.batch;

import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 배치 작업을 위한 설정 클래스입니다.
 * <p>
 * 이 클래스는 Spring Batch의 배치 처리 기능을 활성화하고, 
 * JobRegistryBeanPostProcessor를 설정하여 배치 작업을 등록합니다.
 * </p>
 * 
 * <p>
 * {@code @EnableBatchProcessing} 어노테이션은 Spring Batch의 배치 처리 기능을 활성화합니다.
 * 이 어노테이션을 사용하면, 배치 작업을 정의하고 실행하는 데 필요한 기본 구성 요소들이 자동으로 설정됩니다.
 * </p>
 */
@Configuration
@EnableBatchProcessing
public class BatchConfig {

    /**
     * JobRegistryBeanPostProcessor를 생성합니다.
     * <p>
     * 이 메서드는 JobRegistry를 사용하여 배치 작업을 등록하는 
     * JobRegistryBeanPostProcessor를 반환합니다.
     * </p>
     * 
     * @param jobRegistry JobRegistry 객체
     * @return 설정된 JobRegistryBeanPostProcessor 객체
     */
    @Bean
    JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry) {
        var processor = new JobRegistryBeanPostProcessor();
        processor.setJobRegistry(jobRegistry);
        return processor;
    }

}
