티스토리 뷰
Spring Batch 테스트 코드를 짜다가 메인 애플리케이션은 잘 작동하는데,
테스트 코드를 실행하면 해당 job은 실행이 되지만 첫 step이 진행이 안되는 현상이였다.
job meta table인 BATCH_JOB_EXECUTION 에서 해당 job 정보를 보면 STATUS가 STARTED, EXIT_CODE는 UNKNOWN 이였다.
해당 현상을 검색해보니 아래와 같은 스택오버플로우 글을 보았다.
대충 요약해보면 갑작스럽게 작업이 종료되는 경우에 DB에 해당 job 상태를 쓰지 못한다는 거 같은데...
혹시나해서 JobLauncher에 TaskExecutor를 확인해보니 SimpleAsyncTaskExecutor를 사용하고 있었다...
그래서 아래와 같이 job을 실행한 뒤에 while문을 추가해주니 job이 정상적으로 작동했다.
@Test
void jobTest() throws Exception {
//..생략
JobExecution jobExecution = jobLauncherTestUtils.launchJob(builder.toJobParameters());
Thread.sleep(2000);
while(jobExecution.isRunnig()) {
}
assertEquals(jobExecution.getExitStatus(), ExitStatus.COMPLETED);
}
테스트 코드에서 job 실행은 잘 되지만, step 진행이 안되고 끝나버린다면 사용하고 있는 TaskExecutor을 확인해보자...
추가) https://dongdev.tistory.com/89