Spring Batch에서 Job 실행 시 에러 발생
Caused by: org.springframework.batch.core.repository.JobExecutionAlreadyRunningException: A job execution for this job is already running:
위 에러는 Job 실행 중에 애플리케이션을 강제로 종료시키고, 다시 실행한 경우에 발생했다. 에러 로그를 보면 내가 배치 작업 중 애플리케이션을 강제로 종료했는데, 해당 Job이 비정상적으로 종료되었지만, Spring Batch는 해당 Job이 아직 실행 중이라고 판단한 것 같다.
Spring Batch 5.0이후부터는 JobRepository를 통해 JobExecution을 조회하거나, 생성, 수젖ㅇ하는 로직을 볼 수 있따.
-> Spring Batch가 Job을 실행시킬 때 BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION 등 여러 테이블에 메타데이터를 기록하기 때문.
-> status가 running이면 예외를 발생시키는 코드가 발생했던 것.
쿼리 수행을 통해 status를 변경해줘야 했다.
-> jobExecution의 id로 수정
UPDATE
BATCH_JOB_EXECUTION
SET END_TIME = now(),
STATUS = 'FAILED',
EXIT_CODE = 'FAILED'
WHERE JOB_EXECUTION_ID = ${id}
;
UPDATE
BATCH_STEP_EXECUTION
SET END_TIME = now(),
STATUS = 'FAILED',
EXIT_CODE = 'FAILED'
WHERE JOB_EXECUTION_ID = ${id}
;
내 에러 로그의 경우 id가 5였다.