inflearn logo
강의

Course

Instructor

Spring Batch

JobStep

JobStep 강의에서 childJob() 실행 질문

427

lena1005c3396

8 asked

0

job:
  names: ${job.name:NONE}

설정하고 --job.name=parentjob 설정했습니다.
그럼 parentJob실행이 됩니다.

근데 childJob은 왜 실행되는건가요?
joblauncher 값을 null 로 주어서 인가요?

spring-boot spring-batch

Answer 2

0

lena1005c3396

프로그램 변수 --job.name=parentjob1

   job:   
     names: ${job.name:NONE}
#      enabled: false
@Slf4j
@RequiredArgsConstructor
@Configuration
public class JobStepConfiguration {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job parentJob(){
        return jobBuilderFactory.get("parentJob1")
                .start(jobStep(null))
                .next(step2())
                .build();
    }

    @Bean
    public Step jobStep(JobLauncher jobLauncher){
        return stepBuilderFactory.get("jobStep1")
                .job(childJob())
                .launcher(jobLauncher)
                .parametersExtractor(jobParametersExtractor())
                .listener(new StepExecutionListener() {
                    @Override
                    public void beforeStep(StepExecution stepExecution) {
                        stepExecution.getExecutionContext().putString("name", "user2");
                    }

                    @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("childJob1")
                .start(step1())
                .build();
    }

    @Bean
    public Step step1(){ //TaskletStepBuilder
        return stepBuilderFactory.get("Step1")
                .tasklet((a, b) ->{
                    log.info("Step1 확인");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }


    @Bean
    public Step step2(){
        return stepBuilderFactory.get("Step2")
                .tasklet((a, b) ->{
                    log.info("Step2 확인");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }

}

프로그램 변수로 인해서 parentJob1은 자동 실행 됩니다. 근데 childJob은 왜 자동 실행되는건가요?

(강의 코드와 동일하고 결과도 동일합니다)

0

leaven

Job 설정 파일을 볼 수 있을까요?

0

leaven

jobStep 은 내부에 별도의 Job 객체를 포함하고 있는 구조입니다.

@Bean
    public Step jobStep(JobLauncher jobLauncher){
        return stepBuilderFactory.get("jobStep1")
                .job(childJob())
                .launcher(jobLauncher)

위에서 childJob() 이 Step 에 저장됩니다

그리고 위 설정에서 parentJob 이 실행되면 jobStep 이 실행되고 실행 중 내부에 저장하고 있는 childJob 을 실행하도록 되어 있습니다.
그러기 위해서 jobLauncher 를 별도로 저장하고 있습니다.

그게 jobStep 의 특징입니다.
강의 내용을 찬찬히 들어보시길 권해 드립니다.

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

246

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

111

1

itemSteam open update close 질문

0

112

1