Spring Batch - 23. Job 을 Step 으로 갖는 JobStep

출처

목차

JobStep

Job 에 속하는 Step 중에서 외부의 Job 을 포함하고 있는 Step 입니다. 외부의 Job 이 실패하게 되면 해당 Step 이 실패하므로 결국 해당 Step 을 가진 Job 도 실패하게 됩니다.

모든 메타데이터는 기본 Job 과 외부 Job 별로 각각 저장됩니다.

커다란 시스템을 작은 모듈로 쪼개고 Job 의 흐름을 관리하고자 할때 사용할 수 있습니다.

@Bean
public Job parentJob() {
return this.jobBuilderFactory.get("parentJob")
.start(jobStep(null))
.next(step2())
.build();
}
@Bean
public Step jobStep(JobLauncher jobLauncher) {
return this.stepBuilderFactory.get("jobStep")
.job(childJob())
.launcher(jobLauncher)
.listener(new StepExecutionListener() {
@Override
public void beforeStep(StepExecution stepExecution) {
stepExecution.getExecutionContext().putString("name", "user1");
}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return null;
}
})
.parametersExtractor(jobParametersExtractor())
.build();
}

@Bean
public Job childJob() {
return this.jobBuilderFactory.get("childJob")
.start(step1())
.build();
}

@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// throw new RuntimeException("step1 was failed");
return RepeatStatus.FINISHED;
}
})
.build();
}

@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet((contribution, chunkContext) -> {
throw new RuntimeException("step2 was failed");
// return RepeatStatus.FINISHED;
})
.build();
}


@Bean
public DefaultJobParametersExtractor jobParametersExtractor() {
// ExecutionContext 에 설정된 Key 로 되있는 값을 가져올 수 있다.
DefaultJobParametersExtractor extractor = new DefaultJobParametersExtractor();
extractor.setKeys(new String[]{"name"});
return extractor;
}

JobParametersExtractor

이 인터페이스는 Job 실행 시 필요한 매개변수를 추출하는 역할을 담당합니다.

JobParametersExtractor는 Job 실행을 위해 필요한 매개변수를 추출하는 메서드인 extract()를 정의합니다. 이 메서드는 JobParameters 객체를 반환하며, Job 실행에 필요한 매개변수를 포함합니다.

Spring Batch에서는 매개변수를 추출하는 여러 가지 방법을 제공합니다. 주요한 방법은 다음과 같습니다.

  1. 커맨드 라인 매개변수(Command-line Parameters): 실행 명령어나 스크립트를 통해 Job을 실행할 때, 커맨드 라인에서 전달되는 매개변수를 추출합니다. 예를 들어, “–param1=value1 –param2=value2”와 같이 전달되는 매개변수를 읽어와 JobParameters 객체로 변환합니다.
  2. 환경 변수(Environment Variables): 운영체제의 환경 변수를 통해 매개변수를 전달받을 수 있습니다. 예를 들어, “MY_PARAM=value”와 같은 환경 변수를 읽어와 JobParameters 객체로 변환합니다.
  3. 속성 파일(Properties Files): Spring 환경 설정 파일에 정의된 속성 값을 읽어와 매개변수로 사용할 수 있습니다. 예를 들어, “my.param=value”와 같이 정의된 속성 값을 읽어와 JobParameters 객체로 변환합니다.
  4. JobParametersExtractor를 직접 구현하여 매개변수를 추출하는 로직을 사용자 정의할 수도 있습니다. 이를 통해 특정한 매개변수 소스나 추출 방식에 따라 JobParameters를 생성할 수 있습니다.

추출된 JobParameters 객체는 Spring Batch의 Job 실행 시점에 사용되며, Job 내에서 필요한 매개변수 값을 참조할 수 있게 됩니다. 이를 통해 Job의 실행을 동적으로 제어하고, 매개변수 값을 변경하여 다양한 실행 시나리오를 처리할 수 있습니다.

public interface JobParametersExtractor {

JobParameters getJobParameters(Job job, StepExecution stepExecution);
}
Share