2014-02-07 4 views
5

스프링 배치의 executionContext는 정확히 무엇입니까? 그걸 처리하면 우리는 무엇을 할 수 있습니까? 이것은 executionContext라는 용어의 오버로드 된 사용처럼 보입니다. 아래의 두 "컨텍스트"의 차이점은 무엇입니까? 그 중 하나에는 jobParameters가 있고 다른 하나에는 실행 컨텍스트가 있습니다. 하지만 첫 번째 작업은 작업이 아닌 StepExecution에서 jobParameters를 가져옵니다. 혼란 스럽네. 얼마나 많은 종류의 실행 컨텍스트가 있습니까?스프링 배치의 executionContexts에 대한 혼동

chunkContext.getStepContext() 
         .getStepExecution().getJobParameters() 

chunkContext.getStepContext() 
       .getStepExecution().getJobExecution().getExecutionContext() 

당신이 제공 할 수있는 어떤 계발도 큰 도움이 될 것입니다.

미리 감사드립니다.

답변

11

스프링 배치 내에 두 개의 ExecutionContext가 있습니다. 첫 번째는 작업 수준입니다. 두 번째 단계는 단계 수준입니다. 각각의 경우에 ExecutionContext는 해당 수준과 관련된 정보의 저장 영역 역할을합니다. 예를 들어, Step 's ExecutionContext에서 단계의 상태 (읽은 레코드 수 등)는 일반적으로 저장되므로 다시 시작할 때 판독기와 기록기를 올바른 위치로 재설정 할 수 있습니다. Job의 ExecutionContext는 일반적으로 여러 단계에서 정보를 공유하는 데 사용됩니다.

위와 같이 게시 한 내용은 StepExecution에서 JobParameters를 가져 오는 것입니다. 이것은 실제로 JobExecution에서 가져 오는 지름길입니다. 첫 번째 줄에서 수행중인 작업은 다음과 같습니다.

chunkContext.getStepContext() 
      .getStepExecution() 
      .getJobExecution() 
      .getJobParameters(); 

JobParameters는 ExecutionContext와 관련이 없습니다. 그것들은 String [] args가 public static void main(String[] args)으로 전달 된 것과 같이 작업에 전달 된 매개 변수입니다.

혼란 스러울 수있는 곳은 StepContext입니다. StepContext는 StepScope의 접근자가 작동 할 수있게 해주는 StepExecution의 래퍼 역할을합니다.

<beans:bean id="outputFile" 
    class="org.springframework.core.io.FileSystemResource" scope="step"> 
    <beans:constructor-arg value="#{jobParameters[outputFile]}" /> 
</beans:bean> 

#{jobParameters[outputFile]}

이 약 StepContext.getJobParameters().getString("outputFile");로 평가되고 예를 들어, 다음과 같은 콩과 함께 작업을 구성 할 때.

관련 문제