Spring Batch - Caused by: java.lang.IllegalArgumentException: Job name must be specified in case of multiple jobs 오류

2024. 1. 8. 20:00· 그 외 공부/트러블 슈팅
목차
  1. 문제 상황
  2. 원인
  3. 해결
728x90

문제 상황

Spring Batch를 공부하며 이것저것 시험해보던 중, 처음 보는 예외가 발생했다.

Caused by: java.lang.IllegalArgumentException: Job name must be specified in case of multiple jobs

여러 개의 Job이 있을 때, Job name이 명시되어있어야한다는 메시지를 뿜었다.

 

처음엔 이게 Job 객체를 생성할 때 입력하는 name 파라미터에 관한 것이라고 생각하고, 뭔가 명시가 되지 않았거나 중복된 게 있는 것인지 확인했지만 그런 것은 없었다.

 

원인

원인은 구글링을 통해 쉽게 확인할 수 있었다.

 

해당 문제는 Spring Boot 3 버전에서부터 Spring Batch 사용 시 업데이트 된 내용 때문이었다.

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#multiple-batch-jobs

해당 내용을 정리하자면 다음과 같다.

 

기존에는 스프링 부트가 구동될 때 모든 Job 빈들을 읽어 실행하는 구조였다면, 새로운 버전에서부터는 복수 개의 Job이 컨텍스트 내에 정의되어 있다면 부트 구동 시점에 가동시킬 Job을 프로프티에 명시해야한다. (하나만 등록 가능)

 

만약 컨텍스트 내에 하나의 Job만 존재한다면, 해당 Job은 별도의 명시 없이 부트 구동 시점에 실행된다.

 

해당 수정이 일어난 배경은 깃헙 이슈에서 확인할 수 있었다.

 

대략적으로 정리하자면, 아래와 같았다.

 

1. CLI 등을 통해 JobParameter를 전달할 때, 정의된 모든 Job에게 동일한 JobParameter가 전달되는 문제가 있다.

 

2. Job 구동 순서가 불분명해지고, 각 Job들이 실행되는 로그가 섞이게 된다. 

 

3. 그 밖에도 여러가지 이유로 부트 구동 시점에 여러 개의 Job을 실행시키는 것은 이점보단 단점이 더 크다.

 

해결

해결방법은 간단하다. 부트 구동 시 실행시킬 Job을 yml에 명시하면 된다.

# application.yml

spring:
  batch:
    job:
      name: myJob

 

이렇게 설정한 값은 org.springframework.boot.autoconfigure.batch.BatchProperties.Job의 필드에 세팅된다.

 

이후, BatchAutoConfiguration 에선 해당 Job Name을 가져와 JobLauncherApplicationRunner에 등록하게 된다.

저작자표시 (새창열림)

'그 외 공부 > 트러블 슈팅' 카테고리의 다른 글

Spring Boot의 Multi-Document file 방식의 yml이 정상적으로 작동하지 않은 이슈 해결하기 (feat. use-legacy-processing)  (0) 2025.05.21
왜 @TransactionalEventListener에서 커밋이 안될까?  (0) 2024.04.24
Spring Boot 3 버전 도입 후 NoSuchBeanDefinition 오류 발생 원인과 해결  (1) 2024.01.06
SecurityFilterChain 적용 후 @WebMvcTest 테스트 실패하는 문제 (feat: @WebMvcTest 까보기)  (1) 2023.11.04
데이터베이스 트리거에 의한 Deadlock 발생 이슈  (0) 2023.09.22
  1. 문제 상황
  2. 원인
  3. 해결
'그 외 공부/트러블 슈팅' 카테고리의 다른 글
  • Spring Boot의 Multi-Document file 방식의 yml이 정상적으로 작동하지 않은 이슈 해결하기 (feat. use-legacy-processing)
  • 왜 @TransactionalEventListener에서 커밋이 안될까?
  • Spring Boot 3 버전 도입 후 NoSuchBeanDefinition 오류 발생 원인과 해결
  • SecurityFilterChain 적용 후 @WebMvcTest 테스트 실패하는 문제 (feat: @WebMvcTest 까보기)
SeongOnion
SeongOnion
서버는 꺼지지 않아요
SeongOnion
조무래기 코딩
SeongOnion
전체
오늘
어제
  • 분류 전체보기 (167) N
    • 알고리즘 (81)
      • 이론 (8)
      • 문제풀이 (73)
    • 언어 (15)
      • Python (9)
      • JavaScript (1)
      • JAVA (5)
    • 데이터베이스 (5)
    • 프레임워크 (15)
      • Django (7)
      • Spring (8)
    • 그 외 공부 (38) N
      • 운영체제 (1)
      • 자료구조 (14)
      • 네트워크 (5)
      • CS (2)
      • 기타 (7) N
      • 트러블 슈팅 (9)
    • 프로젝트 (0)
    • 개발자취 (8)
    • 회고 (3)
    • 주저리주저리 (1)
    • 기타 (비개발) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 데이터베이스
  • 트러블 슈팅
  • 스택
  • 투 포인터 알고리즘
  • 브루트포스
  • Django
  • 그리디알고리즘
  • BFS/DFS
  • 회고
  • 컨트리뷰트
  • 소수
  • 코딩테스트
  • 파이썬
  • 개발자
  • 장고
  • DP
  • 알고리즘
  • 에라토스테네스의 체
  • 큐
  • 정렬 알고리즘
  • DRF
  • 오픈소스
  • 이진탐색
  • 웹
  • 프로그래머스
  • 코딩
  • 자바
  • BFS
  • 백준
  • spring

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeongOnion
Spring Batch - Caused by: java.lang.IllegalArgumentException: Job name must be specified in case of multiple jobs 오류
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.