2011-10-18 7 views
1

Spring 배치 작업은 JVM에게 CommandLineJobRunner를 실행하도록 명령하여 명령 줄에서 시작할 수 있습니다. the JavaDoc에 따르면 -stop의 추가 파라미터와 같은 명령을 실행하는 작업 정지합니다명령 줄에서 시작된 SpringBatch 작업 중지

이 클래스의 인수는 (i으로 구분) 명령 행 에 제공 될 수 또는 표준 입력을 통해 (의해 분리 새로운 라인).

jobPath jobIdentifier (jobParameters를) 이

  • jobPath 다음과 같이 명령 줄 옵션은 * : 채용 정보
  • -restart를 포함하는 XML 애플리케이션 컨텍스트를 다음과 같이 그들은 은 (선택 사항)를 다시 시작합니다 마지막 실행 실패
  • -stop : (선택 사항) 실행중인 실행을 중지하려면
  • -abandon : (선택 사항) 취소합니다. 중지 된 실행
  • -next : 작업의 jobParametersIncrementer에 따라 시퀀스를 시작하려면 (선택 사항) 작업 식별자 또는 작업 실행 ID (-stop, -abandon 또는 -restart) .
  • jobParameters : key = value 쌍의 형식으로 지정된 작업을 시작하는 데 사용될 많은 매개 변수입니다.

그러나 main() 메소드의 JavaDoc에서는 -stop 매개 변수가 지정되지 않습니다. docjar.com에서 코드를 살펴보면, -stop 매개 변수를 사용할 수있는 곳을 볼 수 없습니다.

실행중인 배치가 비 일시적인 jobRepository에 의해 백업 된 경우에만 명령 줄에서 시작된 배치를 중지 할 수 있다고 생각합니까? HSQL (즉, 메모리)에 데이터를 저장하는 명령 행에서 배치를 실행하는 경우 CTRL-C 이외의 작업을 중지 할 수있는 방법은 없습니다.

답변

1

정지 명령을 구현 source for CommandLineJobRunner 참조 라인 300 +

 if (opts.contains("-stop")) { 
      List<JobExecution> jobExecutions = getRunningJobExecutions(jobIdentifier); 
      if (jobExecutions == null) { 
       throw new JobExecutionNotRunningException("No running execution found for job=" + jobIdentifier); 
      } 
      for (JobExecution jobExecution : jobExecutions) { 
       jobExecution.setStatus(BatchStatus.STOPPING); 
       jobRepository.update(jobExecution); 
      } 
      return exitCodeMapper.intValue(ExitStatus.COMPLETED.getExitCode()); 
     } 
1

stop 스위치가 작동하지만 현재 실행 단계가 완료된 후에 만 ​​작업을 중지한다. 즉시 직장을 죽이지는 않을 것입니다.