childJob 두번 실행
657
3 câu hỏi đã được viết
안녕하세요. 강의 정말 잘 듣고 있습니다.
한가지 질문이 있어 이렇게 글 올립니다.
JobStep강의에서 childJob을 두번실행하는 경우가 발생합니다.
1. jobStep -> childJob 실행, StepExecutionListener를 이용하여 파라미터 값 {name: "user1"}의 값을 넣어줌
2. @Bean으로 인해서 스프링 컨테이너에서 DI되어 childJob을 한번 더 실행 이때는 파라미터 값 {}임
제가 생각했을때는 childJob에서 저 @Bean을 빼야하는거 같은데 혹시 이게 맞나요??
아니면 저만 그런건가요
Câu trả lời 5
1
위 소스를 그대로 실행해 보니 childJob 이 두번 실행되는 현상은 발생하지 않고 있습니다.
1 : parentJob 실행
2 : jobStep 실행
3 : childJob 실행, JobParameters 에 {name:user1} 저장
4 : step1 실행
5 : step1 의 tasklet 실행
6 : step1 실행 완료
7 : childJob 실행완료
8 : jobStep 실행완료
9 : step2 실행
10 : step2 실행완료
11 : parentJob 실행완료
순으로 실행이 정상적으로 이루어지고 있습니다.
이미지는 다른이름으로 저장한다음 보시거나 브라우저를 확대해서 보시면 됩니다.
다시 한번 확인해 보시기 바랍니다.
0
안녕하세요. 저도 윗 분과 동일하게 childJob이 두 번 실행되는 현상이 있습니다. 코드는 정수원님의 깃헙에 있는 코드와 동일하게 실행하였고, args = --job.name=parentJob date=20220309 로 하였습니다.
디버그로 확인해보니, jobStep으로 childJob이 실행되고, 맨 마지막에 childJob 별도의 Job으로 실행되었습니다.
1 : parentJob 실행
2 : jobStep 실행
3 : childJob 실행, JobParameters 에 {name:user1} 저장
4 : step1 실행
5 : step1 의 tasklet 실행
6 : step1 실행 완료
7 : childJob 실행완료
8 : jobStep 실행완료
9 : step2 실행
10 : step2 실행완료
11 : parentJob 실행완료
12 : childJob 실행
13 : step1 실행
14 : childJob 종료
0
답변이 늦어서 죄송합니다.
밑에 소스공유하겠습니다.
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.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")
.start(jobStep(null))
.next(step2())
.build();
}
@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 JobParametersExtractor jobParametersExtractor() {
DefaultJobParametersExtractor extractor = new DefaultJobParametersExtractor();
extractor.setKeys(new String[]{"name"});
return extractor;
}
@Bean
public Job childJob() {
return 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 {
System.out.println("step1 was executed");
// throw new RuntimeException("childJob was failed");
return RepeatStatus.FINISHED;
}
})
.build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
return RepeatStatus.FINISHED;
}
})
.build();
}
}
스프링 배치 버전 질문
0
120
1
소스코드가 어디에 있나요?
0
96
2
트랜잭션 예외
0
90
1
질문이 있습니다.
0
128
2
ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문
0
124
2
여러 JOB 설정하는법
0
149
2
강의 자료 다른 방법 있을까요?
0
154
1
JobExecution과 JobExecutionContext와의 관계
0
186
2
특정 job만 실행
1
249
1
Batch 성능 질문
0
152
1
ItemReaderAdapter 종료
0
79
1
[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader
0
178
2
Spring Batch 배포 질문
0
245
2
spring batch 버전
0
235
2
retry count 관련 질문
0
170
2
StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.
0
329
2
jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)
0
234
2
Multithread step과 AsyncItemProcessor
0
202
2
job 재실행
0
250
2
bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)
0
183
1
Multi-threaded-step과 Partitioning 차이 확인
0
173
2
jdbcCursorReader, jdbcPagingReader 질문
0
145
1
step muti-thread 질문
0
109
1
itemSteam open update close 질문
0
110
1

