JobStep 강의에서 childJob() 실행 질문
427
8 asked
job:
names: ${job.name:NONE}설정하고 --job.name=parentjob 설정했습니다.
그럼 parentJob실행이 됩니다.
근데 childJob은 왜 실행되는건가요?
joblauncher 값을 null 로 주어서 인가요?
Answer 2
0
프로그램 변수 --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
Job 설정 파일을 볼 수 있을까요?
0
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

