인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

스프링 배치

Transition - on() / to() / stop(), fail(), end(), stopAndRestart()

job 재실행

작성

·

70

0

안녕하세요 강사님 좋은 강의 감사드립니다.

강의의 코드를 따라하며 실습을 하고 있는데 job이 실패했을 경우에만 재시작이 가능하고 completed로 정상적으로 종료되었을 경우에는 재실행이 안된다는 것을 숙지하고 있습니다.(파라미터 없거나 동일할 경우)

근데 현재 flow 관련 실습을 하다보니 job 실행 시 아무런 파라미터도 주지 않고 Job이 completed로 정상적으로 끝났음에도 불구하고 Job이 재실행되는 경우가 있는데 이는 어떤 이유 때문인지 알려주실 수 있을까요?

step 내부에서 contribution을 통해 extiStatus를 FAILED로 설정한 것 때문인지, 이외에도 다른 이유가 있는지 궁금합니다.

확인해주시고 답변 주시면 많은 도움이 될 것 같습니다.

감사합니다.

답변 2

0

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

아래 답변을 참고하시면 됩니다

부연 설명을 하자면 job 이 원칙적으로 재 실행되는 기준은 job 이 실패한 경우와 또는 job 이 성공하더라도 job parameter 가 다를 경우입니다. 그 외에는 재실행되지 않습니다.

일단 이 원칙과 allowStartIfComplete 옵션이 true 가 아니면 재실행 되지 않으니 이 기준하에 재실행 여부를 파악해 보고 가급적 디버깅 하면서 해 보시기 바랍니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

스프링 배치에서 Job의 재실행 여부는 기본적으로 JobInstance와 JobParameters에 의해서 결정됩니다. 질문 주신 내용을 기반으로 몇 가지 고려해볼 수 있는 점을 안내하겠습니다:

  1. JobParameters의 영향: JobParameters가 서로 다를 경우, 스프링 배치는 이를 새로운 실행으로 간주합니다. 따라서 파라미터가 같을 경우에만 이전에 완료된 Job의 상태를 확인하여 실행 여부를 판단합니다.

  2. allowStartIfComplete 옵션: Job 설정 시 allowStartIfComplete(true)로 설정하면 Job이 이미 완료되었어도 Job의 재실행이 가능하도록 허용합니다. 코드에서 이 옵션이 설정되어 있는지 확인해 보세요.

  3. ExitStatus 설정: Step의 contribution.setExitStatus(ExitStatus.FAILED) 설정이 Job의 종료 상태에 영향을 줄 수 있지만, Job 자체가 이미 COMPLETED로 종료되었다면 Step의 상태는 재실행 여부에 즉각적 영향을 미치지 않습니다. 다만, Step의 ExitStatus에 따라 Job의 상태가 결정될 수 있도록 Flow가 구성되어 있는지 확인이 필요합니다.

아래 링크들은 추가적으로 관련 정보를 제공하는 이전의 유사한 질문들입니다:

  1. 이런 내용을 다룬 부분이 강의에 있는지 궁금합니다.
  2. 한번 실행된 잡의 실행여부에 대해 질문드립니다.

이 답변들이 추가적인 힌트를 제공해드릴 수 있기를 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

질문하기