티스토리 뷰

Spring Batch 테스트 코드를 짜다가 메인 애플리케이션은 잘 작동하는데,

테스트 코드를 실행하면 해당 job은 실행이 되지만 첫 step이 진행이 안되는 현상이였다.

 

job meta table인 BATCH_JOB_EXECUTION 에서 해당 job 정보를 보면 STATUS가 STARTED, EXIT_CODE는 UNKNOWN 이였다. 

해당 현상을 검색해보니 아래와 같은 스택오버플로우 글을 보았다.

https://stackoverflow.com/questions/68169477/how-to-update-spring-batch-status-on-unexpected-shutdown

 

How to update Spring Batch status on unexpected shutdown

I'm implementing a service that would reject job requests from being processed if an existing job is running. Unfortunately, I'm not sure if there is a way to tell the difference between a job tha...

stackoverflow.com

 

대충 요약해보면 갑작스럽게 작업이 종료되는 경우에 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 

 

JobLauncher (Sync, Async)

JobLauncher Batch Job을 실행시킨다. Job과 JobParameters를 인자로 받는다. Batch를 수행한 후 JobExecution을 반환한다. Spring Batch가 구동되면 JobLauncher 빈이 생성된다. Job 실행 jobLauncher.run(job, jobParameters) Sync ta

dongdev.tistory.com

 

링크
최근에 올라온 글
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31