본문 바로가기
츄Log/끄적끄적

Spring Batch job_parameter 유무에 따른 예외 처리 차이

by 츄츄🦭 2023. 12. 29.
728x90

 

스프링 배치를 공부중입니다.

 

이런저런 테스트를 해보다가 다음과 같은 상황을 맞이했습니다.

 

completed된 동일한 job instance를 재실행 하는 경우,

1. job parameter가 있는 경우에는 JobExecution을 만드는 과정에서 JobInstanceAlreadyCompleteException 발생합니다.

 

2. job parameter가 없는 경우에는 위 코드 조건문에 맞지 않아서 JobExecution이 생깁니다.

Step Handler에서 Step이 모두 Completed상태이므로 Step already complete or not restartable, so no action to execute: StepExecution~ 로그가 찍힙니다.

생성된 JobExecution의 STATUS는 COMPLETED, EXIT_CODE는 NOOP, EXIT_MESSAGE에 이미 완료된 스텝이라고 나옵니다.

 

 

이상했습니다.

Job은 job_name과 job_key(Job Parameter를 해시한 값)을 가지고 유일성을 확인합니다.

(job parameter가 없으면 job_key는 job_name을 가지고 만들게 됩니다.)

위에 테스트한 1번 2번 모두 유일한 job_instance로 테스트한 것입니다. 

  1. job_name : job / job_parameter : name-user1
  2. job_name : job / job_parameter : 없음

 

유일한 job instance로 테스트하는 상황은 동일한데, 왜 발생하는 상황은 다를까요? 

왜 identifyingJobParameterCount가 있는 경우에만 JobInstanceAlreadyCompleteException을 발생시키는 것일까요? 

왜 indentifyingJobParamterCount가 0인 경우에는 계속 진행하고 EXIT_CODE를 NOOP 처리를 하는 걸까요? 

 

이유는 좀 더 공부해봐야 알 수 있을 것 같습니다. 스프링 배치의 철학에 달렸을 수도 있구요.

프레임워크는 추상적으로는 같은 상황이더라도 특정 조건에 따라 완전히 다르게 동작할 수 있다는 것을 배웠습니다.

확실히 의아할 때는 코드를 까보는게 정석인 것 같습니다. 

 

위 의문에 답을 찾게 되면 다시 작성하러 오겠습니다ㅎㅎ

728x90