flow 위에 jobparameters를 사용하기 위해서는 어떤 scope를 정의해줘야 하나요?
709
작성한 질문수 5
안녕하세요, 강사님!
job > flow > step으로 구성되어 있는데 flow위에 jobparameters를 사용하기 위해서는 어떤 scope를 정의해줘야 하나요? step scope is not active라고 자꾸 오류가 나네요.
강의를 봐도 잘 이해가 안 가서요. 아직 제가 개념이 덜 잡혔나봅니다. ㅠㅠ
답변 감사드립니다!
코드입니다!
@Slf4j
@Getter
@NoArgsConstructor
public class CreateDateJobParameter {
private String startDate;
private String endDate;
@Value("#{jobParameters[startDate]}")
public void setStartDate(String startDate) {
this.startDate = startDate;
}
@Value("#{jobParameters[endDate]}")
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}
@Slf4j
@RequiredArgsConstructor
@Configuration
public class OrderProcessingJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final CreateDateJobParameter jobParameterCreator;
@JobScope
@Bean
public CreateDateJobParameter jobParameterCreator() {
return new CreateDateJobParameter();
}
@Bean
public Job orderProcessingJob() {
return jobBuilderFactory.get("orderProcessingJob")
.incrementer(new UniqueRunIdIncrementer())
.start(fetchOrderDataFlow())
.next(getOrderListFlow())
.split(taskExecutor())
.add()
.end()
.build();
}
@Bean
@StepScope
public Flow fetchOrderDataFlow() {
log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>fetchOrderDataFlow");
Flow flow1 = new FlowBuilder<Flow>("flow1")
.start(fetchOrderDataStep1())
.build();
Flow flow2 = new FlowBuilder<Flow>("flow2")
.start(fetchOrderDataStep2())
.build();
Flow flow3 = new FlowBuilder<Flow>("flow3")
.start(fetchOrderDataStep3())
.build();
Flow flow4 = new FlowBuilder<Flow>("flow4")
.start(fetchOrderDataStep4())
.build();
Flow flow5 = new FlowBuilder<Flow>("flow5")
.start(fetchOrderDataStep5())
.build();
FlowBuilder<SimpleFlow> flowBuilder = new FlowBuilder<>("fetchOrderDataFlow");
flowBuilder.split(taskExecutor())
.add(flow1, flow2, flow3, flow4, flow5);
return flowBuilder.build();
}
@Bean
public Step fetchOrderDataStep1() {
return createFetchOrderDataStep("fetchOrderDataStep1", "store1", jobParameterCreator.getStartDate(), jobParameterCreator.getEndDate());
}
...
}
답변 1
0
네
강의를 좀 더 찬찬히 들어보시길 권해 드립니다
@Jobscope 는 Step을 선언하는 빈에 설정하는 것이고 @Stepscope 는 Tasklet 이나 Chunk 단위에 설정하는 개념입니다
CreateDateJobParameter 는Step 이 아니기 때문에 @JobScope를 선언하거나 Flow 에 @StepScope 를 선언해서는 안됩니다
전반적인 내용을 조금 더 자세히 들으시면 크게 어려운 개념이 아니라서 이해가 되시리라 생각합니다
강의 내용중에 이해가 안되는 부분이 있으면 질의해 주세요
스프링 배치 버전 질문
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





