2014-03-01 2 views
1

타이밍 임계 값이 충족되면 작업을 중지 할 수 있기를 원합니다. 생각하고있는 두 가지 접근 방식이 있습니다. 첫 번째는 afterStep에서 작업을 중단하는 것이 었습니다. 그러나 마지막 단계가 완료되면 정지 상태가되는 것을 원하지 않습니다. 그러므로 나는 beforeStep에서 멈추려 고 할 것이다.

나는스프링 배치의 beforeStep에서 작업 중지

public void beforeStep(StepExecution stepExecution) { 
    stepExecution.setStatus(BatchStatus.STOPPED); 
    return; 
} 

public void beforeStep(StepExecution stepExecution) { 
    stepExecution.setExitStatus(ExitStatus.STOPPED); 
    return; 
} 

일이 중 어느 것도 실험을 시도했다. 어떤 제안?

답변

1

위 코드의 문제점은 전체 작업이 아니라 현재 실행중인 단계를 중지한다는 것입니다.

아마도 job-current-step 구성에 다음 코드를 추가하고 조정하면 단계의 ExitStatus가 STOPPED 일 때 작업이 종료되고 다시 실행될 때 작업은 다음 단계에서 시작됩니다. (here에서 촬영)

<step id="step1" parent="s1"> 
    <stop on="STOPPED" restart="step2"/> 
</step> 


This하는 것도 ExitStatus/BatchStatus 사이의 혼란을 해결하는 데 도움이 될 수 있습니다.

타이밍 임계 값 정보 ... 이전 단계가 실행 된 시간에 관계없이 (beforestep - afterstep)의 현재 시간 만 측정 할 계획입니다. 이전 단계에서 JobParameters에 타임 스탬프를 추가하고 해당 임계 값이 전달되는지 확인하십시오.

0
당신은 타이머 (또는 비슷한) 및 Stopping a job에 설명 된대로 작업을 중지 notitication 시간 제한을받을 수를 설정할 수 있습니다

.
마지막 단계에서 시간 알람이 방송 된 경우에도 작업이 정상적으로 완료되기를 원하는 경우 작업 진행 상황을 쿼리 할 수 ​​있습니다 (JobOperator 사용).

관련 문제