Step간 데이터 전달

Job이 여러 개의 Step으로 구성되어 있는 경우 Step간 데이터를 전달하여 처리할 수 있다. 다음은 Step간에 데이터를 전달하는 방법에 대한 설명이다.

  • BeforeStep

Step간 데이터를 전달은 JobExecution의 ExecutionContext에 전달할 데이터를 저장 처리를 하여야 한다. JobExecution 의 ExecutionContext는 beforeStep 메소드에서 가져올 수 있으며 필요 시 아래의 예와 같이 정의하여 사용 할 수 있다. 참고로 Tasklet에서는 beforeStep을 사용 할 수 없다.

  • 주의 사항

(1) beforeStep은 Step의 실행되지 전에 호출되는 Step 전처리 메소드이며, 해당 메소드에는 업무로직을 포함하지 않도록 한다.

private ExecutionContext jobExecutionContext; // (1)

// (2)
@BeforeStep
public void beforeStep(StepExecution stepExecution)
{
    jobExecutionContext = stepExecution.getJobExecution().getExecutionContext();
}

(1) 배치 Bean에서 ExecutionContext를 사용하기 위하여 멤버변수로 선언한다.

(2) JobExecution의 ExecutionContext를 가져오기 위해서 beforeStep 메소드를 정의하고 StepExecution에서 JobExecution의 ExecutionContext를 멤버변수로 선언한 (1)의 ExecutionContext에 정의한다

  • ExecutionContext

ExecutionContext는 아래와 같이 사용할 수 있다.

jobExecutionContext.putString("inptDate", inptDate); // (1)

/* ExecutionContext Get */
String inptDate;
if(jobExecutionContext.containsKey("inptDate")) {  // (2)
    inptDate = jobExecutionContext.getString("inptDate");  // (3)
}
else {
    // Key 없음
}

(1) ExecutionContext에 설정할 값을 Set한다.

(2) ExecutionContext에 Set 되어진 Key가 존재하는지 확인한다. 만일 Get하려는 Key가 없는데, Get 하려고 하면 Exception이 발생하기 때문에 Key가 존재하는지 확인하는 절차가 필요하다.

(3) ExecutionContext에 설정 되어진 값을 Get한다.

  • Tasklet에서 Step간 데이터 전달

Tasklet에서는 BeforeStep이 아니라 Tasklet 구현 메소드인 execute 에서 처리할 수 있다.

@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext)
        throws Exception {

    ExecutionContext jobExecutionContext =
        chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext();
SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

Copyright© Bankwareglobal All Rights Reserved.