2016-07-11 2 views
0

SpringBatch에서 데이터베이스의 작업 정의에 대한 메타 데이터가 부족한 것 같습니다. 데이터베이스에 작업 인스턴스를 생성하기 위해스프링 배치에서 여러 버전의 작업 구성

, 그것은 고려 유일한 것은 작업의 대상 모델은 단계와 청취자를 고려하기에 충분 풍부, "JobInstance createJobInstance(String jobName, JobParameters jobParameters);"

작업 이름과 jobParamter입니다하지만. 따라서 기존 작업의 새 버전을 만드는 경우 몇 가지 추가 단계를 추가하여 스프링 배치가 이전 버전과 구별되지 않습니다. 따라서 이전 버전을 실행하고 업데이트 된 버전을 실행하면 이전 버전의 실행이 성공적이라고 느끼기 때문에 스프링 배치가 업데이트 된 버전을 실행하지 않습니다. 현재 작업의 버전 번호는 이름의 일부 여야합니다. 이 올바른 이해인가?

답변

1

프레임 워크가 작업 이름과 (식별) 작업 매개 변수의 고유 한 조합으로 각 작업 인스턴스를 식별한다는 것이 맞습니다.

일반적으로 작업이 실패하면 동일한 매개 변수로 다시 실행하여 실패한 인스턴스를 다시 시작할 수 있어야합니다. 그러나 완료된 인스턴스는 다시 시작할 수 없습니다. 문서에서 :

JobInstance는 실행 실패시 여러 번 다시 시작될 수 있으며 처음 실행이 끝나면 수명주기가 끝납니다. 이미 성공적으로 완료된 기존 JobIntance를 실행하려고하면 오류가 발생합니다. 작업을 다시 시작할 수없는 경우 실패한 JobInstance를 다시 시작하려는 시도도 오류가 발생합니다.

동일한 작업 이름과 매개 변수를 식별하는 것은 여러 번 실행할 수 없습니다. 디자인 프레임 워크는 업무 단계에서 수행하는 업무와 상관없이이를 방지합니다. 다시 말하지만, 당신의 일이 실제로 무엇을 무시하고, 여기 그것이 작동 할 방법은 다음과 같습니다 우리는 다음과 같은 사항 사용

1) jobName=myJob, parm1=foo , parm2=bar -> runs and fails (assume some exception) 
2) jobName=myJob, parm1=foo , parm2=bar -> restarts failed instance and completes 
3) jobName=myJob, parm1=foo , parm2=bar -> fails on startup (as expected) 
4) jobName=myJob, parm1=foobar, parm2=bar -> new params, runs and completes 

은 "모범 사례"

  • 각 작업 인스턴스 (일반적으로 실행 날짜로 정의 우리가 처리하는 파일 이름)은 고유 한 매개 변수 집합을 정의해야합니다 (그렇지 않으면 프레임 워크 설계에 따라 실패합니다)
  • 하루에 여러 번 실행되지만 작업 테이블 등을 스캔하는 작업은 정수 매개 변수를 전달하기 위해 증분기를 사용합니다. 성공할 때마다 1 씩 증가합니다.
  • 작업에 영향을주는 코드 변경 사항은 작동하기 전에 실패한 작업 인스턴스를 다시 시작하거나 취소해야합니다.
관련 문제