출처
목차
StepBuilderFactory
StepBuilder 를 생성하는 팩토리 클래스
public class StepBuilderFactory { private JobRepository jobRepository; private PlatformTransactionManager transactionManager; public StepBuilderFactory (JobRepository jobRepository, PlatformTransactionManager transactionManager) { this .jobRepository = jobRepository; this .transactionManager = transactionManager; } public StepBuilder get (String name) { StepBuilder builder = new StepBuilder (name).repository(jobRepository).transactionManager( transactionManager); return builder; } }
StepBuilder
Step 구성을 쉽게 하기 위한 빌더 클래스
StepBuilderFactory 객체내 get 메소드를 이용하면 StepBuilder 객체를 생성할 수 있다. StepBuilderFactory 객체를 통해 생성된 StepBuilder 객체는 호출되는 메소드에 따라 하위 Builder 객체 생성한 후 각 Step 생성을 위임한다
메소드별 생성되는 하위 StepBuilder 객체
메소드
반환 객체
설명
tasklet
TaskletStepBuilder
TaskletStep 를 생성하는 Builder 클래스
chunk
SimpleStepBuilder
TaskletStep 를 생성하며 내부적으로 Chunk 기반의 작업을 처리하는 ChunkOrientedTasklet 클래스를 생성한다.
partitioner
PartitionStepBuilder
PartitionStep 을 생성하며 Multi Thread 방식으로 Job 을 처리한다.
job
JobStepBuilder
JobStep 을 생성하여 Step 안에서 Job 을 실행한다.
flow
FlowStepBuilder
FlowStep 을 생성하여 Flow 안에서 Job 을 실행한다.
StepBuilder.java
public class StepBuilder extends StepBuilderHelper <StepBuilder> { public StepBuilder (String name) { super (name); } public TaskletStepBuilder tasklet (Tasklet tasklet) { return new TaskletStepBuilder (this ).tasklet(tasklet); } public <I, O> SimpleStepBuilder<I, O> chunk (int chunkSize) { return new SimpleStepBuilder <I, O>(this ).chunk(chunkSize); } public <I, O> SimpleStepBuilder<I, O> chunk (CompletionPolicy completionPolicy) { return new SimpleStepBuilder <I, O>(this ).chunk(completionPolicy); } public PartitionStepBuilder partitioner (String stepName, Partitioner partitioner) { return new PartitionStepBuilder (this ).partitioner(stepName, partitioner); } public PartitionStepBuilder partitioner (Step step) { return new PartitionStepBuilder (this ).step(step); } public JobStepBuilder job (Job job) { return new JobStepBuilder (this ).job(job); } public FlowStepBuilder flow (Flow flow) { return new FlowStepBuilder (this ).flow(flow); } }
TaskletStepBuilder @Bean public Step step1 () { return stepBuilderFactory.get("step1" ) .tasklet((contribution, chunkContext) -> { System.out.println("step1 has executed" ); return RepeatStatus.FINISHED; }) .build(); }
SimpleStepBuilder @Bean public Step step2 () { return stepBuilderFactory.get("step2" ) .<String, String>chunk(3 ) .reader(() -> null ) .writer(list -> {}) .build(); }
PartitionStepBuilder @Bean public Step step3 () { return stepBuilderFactory.get("step3" ) .partitioner(step1()) .gridSize(2 ) .build(); }
JobStepBuilder @Bean public Step step4 () { return stepBuilderFactory.get("step4" ) .job(job()) .build(); }
@Bean public Job job () { return this .jobBuilderFactory.get("job" ) .start(step1()) .next(step2()) .build(); }
FlowStepBuilder @Bean public Step step5 () { return stepBuilderFactory.get("step5" ) .flow(flow()) .build(); }
@Bean public Flow flow () { FlowBuilder<Flow> flowBuilder = new FlowBuilder <>("flow" ); flowBuilder.start(step2()).end(); return flowBuilder.build(); }