인프런 커뮤니티 질문&답변

이화평님의 프로필 이미지

작성한 질문수

스프링 배치

SimpleJob - incrementer()

Job을 여러번 실행할 때

작성

·

836

0

해당 강의에서 같은 파라미터로 job을 여러번 실행하기 위해 incrementer() API를 알려주셨는데요. 의문이 있습니다.

실제 업무 환경에서는 똑같은 파라미터로 계속해서 실행할 경우가 있습니다.

 

예를 들어 하루에 1시간 단위로 실행되어야 하는 job은  파라미터로 2022-01-01 과 같이 날짜 파라미터를 받아 실행하는 경우가 있는데요. 이때 같은 파라미터로 똑같은 job을 실행할 수 없으니 incrementer() 를 사용하면 해결될 것 같긴 한데, 만약 스프링 배치 어플리케이션이 재기동이 될 경우 id 값이 0으로 초기화 되는 문제가 발생합니다.

즉, 날짜 파라미터는 2022-01-01로 동일한데, incrementer()를 통해 1~10까지 수행했다가, 어플리케이션이 재시작되게 되면 incrementer()를 통해 다시 1부터 수행하기 때문에 같은 job을 실행할 수 없는 상황이 올 것 같습니다.

이런 문제는 어떻게 해결하나요..? incrementer()가 순차적으로 증가하는 값이 아니라 랜덤 값 같은 걸 반환하도록 해야할까요? 근데 이러한 방식도 중복을 100% 방지할 수는 없다고 생각합니다.

스프링 배치에서 지원하는 API가 따로 있나요? 강의 뒷 부분에 나오는지 궁금하네요.

답변 2

1

스프링 배치 어플리케이션이 재기동 되어도 id값이 0으로 초기화되는게 아니라 DB에서 마지막 run.id 값을 가져와서 +1 해서 사용하니까 상관없이 항상 잘 실행되는것 아닌가요?? (RunIdIncrementer 구현체 기준으로 말씀드린겁니다)

1

정수원님의 프로필 이미지
정수원
지식공유자

네.

그건 increment 의 값이 유일한 값이면 되기 때문에 1 씩 증가하는 것으로 구현하지 말고 실행당시의 시간을 밀리세컨드로 생성해서 jobparameter 로 전달하면 됩니다.

그러면 재 기동하더라도 항상 다른 값으로 전달이 가능할 것 같습니다.