• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Job 실행지연 시 같은 Job실행 방지

22.09.08 11:40 작성 조회수 466

1

(현재 환경은 job 스케줄링을 jenkinse로 하고 있고, 서버를 1개만 사용할 계획입니다.)

스케줄링대로 5분 간격으로 여러 Job을 실행시키는 경우 1번 Job이 실행이 지연으로

1번 Job 이 배치를 돌고 있는 중에 다시 1번 Job실행 순서가 오는 경우,

즉, 같은 Job이 실행 중인 경우에는 같은 Job실행을 방지하고 싶은데

Listener를 이용하는 방법 말고 혹시 다른 방법으로 이를 구현할 수 있는 방법은 없을까요??

JobOperator.stop으로 막아야 할 거 같은데 어떤 구현객체, interface를 활용해야 할지 모르겠습니다.

답변 1

답변을 작성해보세요.

1

음..

사실 이 문제는 배치와는 상관이 없는 순전히 스케줄링과 관련된 부분입니다.

즉 시간설정에 따라 트리거가 일어난 후 배치가 실행되고 나서 다음 트리거가 실행될 때 이전의 배치가 현재 실행 상태인지 아니면 완료상태인지를 체크하고 완료된 경우에만 다음 배치를 실행시키고 그렇지 않으면 트리거가 작동하지 않도록 해야 합니다.

JobOperator 는 배치가 실행된 이후의 동작을 제어하는 기능을 제공하기 때문에 이전의 배치와 현재의 배치가 동시에 진행된다면 오히려 더 복잡해지고 충돌이 날 가능성이 높아서 이런 방법은 좋지 않습니다.

질문하신 내용을 구현하기 위해서는 Job 의 상태들을 저장해 놓고 현재 실행중인 Job 의 상태가 어떻게 되는지를 실시간으로 체크하고 상태결과에 따라 다음 Job 의 실행 여부를 결정 및 진행하는 식으로 구성해야 할 것 같습니다.

다만 스프링 배치 API 에서 스케줄링을 제어하는 기능은 지원하지 않기 때문에 젠킨스나 쿼츠 같은 스케줄링 프로그램에서 위 내용에 대한 설정이나 API 가 있는지 검색해 보시고 없을 경우 Job 스케줄 관리 기능을 별도로 구현해야 할 것 같습니다.

 

el님의 프로필

el

질문자

2022.09.12

몇일동안 구글링도 해보고 여러 시도를 해봤는데 역시 스프링배치로는 해결이 안되더라구요.

조언주신대로 관련 api가 있는지, 스케줄 관리기능에 관해 좀더 공부해보겠습니다.

답변해주셔서 감사합니다:)