#11 spring batch: JobStep
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package io.springbatch.basic.step;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.batch.core.*;
|
||||
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
|
||||
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
|
||||
import org.springframework.batch.core.launch.JobLauncher;
|
||||
import org.springframework.batch.core.launch.support.RunIdIncrementer;
|
||||
import org.springframework.batch.core.scope.context.ChunkContext;
|
||||
import org.springframework.batch.core.step.job.DefaultJobParametersExtractor;
|
||||
import org.springframework.batch.core.step.job.JobParametersExtractor;
|
||||
import org.springframework.batch.core.step.tasklet.Tasklet;
|
||||
import org.springframework.batch.repeat.RepeatStatus;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class JobStepConfiguration {
|
||||
|
||||
private final JobBuilderFactory jobBuilderFactory;
|
||||
private final StepBuilderFactory stepBuilderFactory;
|
||||
|
||||
@Bean
|
||||
public Job parentJob() {
|
||||
return jobBuilderFactory.get("parentJob")
|
||||
.incrementer(new RunIdIncrementer())
|
||||
.start(jobStep(null))
|
||||
.next(step2())
|
||||
.next(step3())
|
||||
.build();
|
||||
}
|
||||
|
||||
/*
|
||||
JobStep
|
||||
|
||||
- Job 에 속하는 Step 중 외부의 Job 을 포함하고 있는 Step
|
||||
- 외부의 Job 이 실패하면 해당 Step 이 실패하므로 결국 최종 기본 Job 도 실패
|
||||
- 모든 메타데이터는 기본 Job 과 외부 Job 별로 각각 저장
|
||||
- 커다란 시스템을 작은 모듈로 쪼개고 Job 의 흐름을 관리하고자 할 때 사용
|
||||
*/
|
||||
@Bean
|
||||
public Step jobStep(JobLauncher jobLauncher) {
|
||||
return stepBuilderFactory.get("jobStep")
|
||||
.job(childJob())
|
||||
.launcher(jobLauncher)
|
||||
.parametersExtractor(jobParametersExtractor())
|
||||
.listener(new StepExecutionListener() {
|
||||
@Override
|
||||
public void beforeStep(StepExecution stepExecution) {
|
||||
stepExecution.getExecutionContext().putString("name", "user1");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExitStatus afterStep(StepExecution stepExecution) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
private DefaultJobParametersExtractor jobParametersExtractor() {
|
||||
DefaultJobParametersExtractor extractor = new DefaultJobParametersExtractor();
|
||||
extractor.setKeys(new String[]{"name"});
|
||||
return extractor;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Job childJob() {
|
||||
return jobBuilderFactory.get("childJob")
|
||||
.incrementer(new RunIdIncrementer())
|
||||
.start(step1())
|
||||
.next(step2())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Step step1() {
|
||||
return stepBuilderFactory.get("step1")
|
||||
.tasklet((contribution, chunkContext) -> {
|
||||
System.out.println("step1 was executed");
|
||||
// throw new RuntimeException("step1 was failed");
|
||||
return RepeatStatus.FINISHED;
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Step step2() {
|
||||
return stepBuilderFactory.get("step2")
|
||||
.tasklet((contribution, chunkContext) -> {
|
||||
System.out.println("step2 was executed");
|
||||
return RepeatStatus.FINISHED;
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Step step3() {
|
||||
return stepBuilderFactory.get("step3")
|
||||
.tasklet(new CustomTasklet())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import org.springframework.batch.repeat.RepeatStatus;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
//@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class Limit_AllowConfiguration {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user