inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

@JobScope / @StepScope - 기본개념 및 설정

flow 위에 jobparameters를 사용하기 위해서는 어떤 scope를 정의해줘야 하나요?

709

1hany number

작성한 질문수 5

0

안녕하세요, 강사님!

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());
  }
...
}

spring-boot spring-batch

답변 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