[Spring Batch] @EnableBatchProcessing 적용시 배치 잡이 동작하지 않는 문제

2024. 5. 18. 15:47·Spring Framework/Spring Batch

목차


    # 문제

     

    티켓팅 프로젝트를 개발하면서 Spring Batch를 이용하여 배치 잡을 구현했다. 배치 잡을 구현하면서 배치 서버 기동 시 헬스체크 테스트를 위한 배치 잡을 구현하였는데, @EnableBatchProcessing 어노테이션을 configuration 클래스에 적용했음에도 기본 잡이 실행되지 않는 문제가 발생하였다. 테스트 배치 잡의 경우 프로젝트에서 필요한 기능은 아니었기 때문에 중요한 문제는 아니었지만, 왜 동작하지 않았는지에 대해서 간단하게 정리해보고자 한다.

     

    # 원인

     

    문제의 원인은 SpringBoot 3.0 부터 DefaultBatchConfiguration 클래스 혹은 EnableBatchProcessing 어노테이션을 선언할 경우 배치 잡의 자동 실행하는 것을 제한하는 로직이 추가 되었기 때문이다.

     

    @AutoConfiguration(after = { HibernateJpaAutoConfiguration.class, TransactionAutoConfiguration.class })
    @ConditionalOnClass({ JobLauncher.class, DataSource.class, DatabasePopulator.class })
    @ConditionalOnBean({ DataSource.class, PlatformTransactionManager.class })
    @ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class)
    @EnableConfigurationProperties(BatchProperties.class)
    @Import(DatabaseInitializationDependencyConfigurer.class)
    public class BatchAutoConfiguration {
    	@Bean
    	@ConditionalOnMissingBean
    	@ConditionalOnProperty(prefix = "spring.batch.job", name = "enabled", havingValue = "true", matchIfMissing = true)
    	public JobLauncherApplicationRunner jobLauncherApplicationRunner(JobLauncher jobLauncher, JobExplorer jobExplorer,
    			JobRepository jobRepository, BatchProperties properties) {
    		JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(jobLauncher, jobExplorer, jobRepository);
    		String jobNames = properties.getJob().getName();
    		if (StringUtils.hasText(jobNames)) {
    			runner.setJobName(jobNames);
    		}
    		return runner;
    	}
        ...
    }

     

    위의 코드에서 @ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class) 부분을 살펴보자. 어노테이션은 DefaultBatchConfiguration 혹은 EnableBatchProcessing이 정의된 빈이 있을 경우 스프링에 등록된 기본 빈을 사용하지 않고, 등록된 빈을 사용하게 된다. 

     

    기존의 코드에서는 빈 configuration 클래스에 @EnableBatchProcessing 어노테이션만이 적용되어 있었고, 내부 적으로 배치 잡의 자동 실행 해주는 로직은 오버라이딩 해주지 않았다. 그렇기 때문에 빈으로 등록된 배치 잡이 서버 기동시 실행되지 않았던 것이다.

     

    만약, 기동시 동작해야 하는 배치 잡이 있다면 등록된 배치 잡을 실행시켜주기 위한 별도의 메서드를 오버라이딩 해두어야 한다. 그렇지 않은 빈들은 jobLauncher 혹은 스케줄러를 이용해서 배치 잡을 실행시켜줄 수 있다.

     

    public void sampleJobCaller(
            final JobParameters jobParameters
        ) {
            try {
                jobLauncher.run(job, jobParameters);
            } catch (
                JobExecutionAlreadyRunningException |
                JobInstanceAlreadyCompleteException |
                JobParametersInvalidException |
                JobRestartException e
            ) {
                throw new RuntimeException(e);
            }
        }

     

    'Spring Framework > Spring Batch' 카테고리의 다른 글

    [Spring Batch] Spring Batch 6 도입 중 Chunk 기반 처리 버그 디버깅 및 6.0.1 패치 적용  (0) 2026.01.03
    [Spring Batch] JdbcPagingItemReader 정리  (1) 2025.12.13
    [Spring Batch] 동일한 Job과 Step이 반복 실행되지 않는 문제  (0) 2024.05.18
    'Spring Framework/Spring Batch' 카테고리의 다른 글
    • [Spring Batch] Spring Batch 6 도입 중 Chunk 기반 처리 버그 디버깅 및 6.0.1 패치 적용
    • [Spring Batch] JdbcPagingItemReader 정리
    • [Spring Batch] 동일한 Job과 Step이 반복 실행되지 않는 문제
    Log Cat
    Log Cat
    잊어버리지 않기 위한 메모장
    • Log Cat
      개발 메모장
      Log Cat
    • 전체
      오늘
      어제
      • 전체보기 (45) N
        • Book Review (6)
        • Language (15) N
          • Java (10) N
          • Go (1)
          • JavaScript (1)
          • TypeScript (3)
        • Computer Science (3)
          • Network (1)
          • Database (1)
          • Design Pattern (0)
        • Spring Framework (10)
          • Spring & Spring Boot (4)
          • Spring Batch (4)
          • Servlet & JSP (2)
        • Python Framework (3)
          • FastAPI (3)
        • Infra (3)
          • Dcoker (1)
          • Kafka (2)
        • ORM (1)
          • JPA (1)
        • Fun (1) N
        • Error (2)
        • Retrospective (0)
        • Certificate (1)
    • 블로그 메뉴

      • 홈
      • 태그
      • 방명록
    • 링크

      • Github
    • 인기 글

    • 태그

      개발서적리뷰
      프로그래머스
      jmm
      Java
      우아한테크코스
      leetcode
      fastapi
      네트워크
      effective java 3/e
      escape-analysis
      성공과 실패를 결정하는 1%의 네트워크 원리
      programmers
      프로그래머스 문제
      Typescript
      jvm
      BOJ
      코테
      이팩티브 자바
      개발서적
      백준
      spring boot
      프로그래머스문제
      자바 풀이
      Python
      리트코드
      spring
      코딩테스트
      spring kafka
      자바
      네트워크 원리
    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    Log Cat
    [Spring Batch] @EnableBatchProcessing 적용시 배치 잡이 동작하지 않는 문제
    상단으로

    티스토리툴바