반응형
JobParameter는 Spring Batch를 실행할 때 내/외부에서 받는 파라미터를 뜻하며, JobParameter를 사용하기 위해선 @StepScope, @JobScope 를 선언해야 한다.
@JobScope
- Step 선언문에서 사용
@Bean
public Job simpleJobExample() {
return jobBuilderFactory.get("simpleJobExample")
.start(simpleStep1(null))
.next(simpleStep2())
.build();
}
@Bean
@JobScope
public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) {
return stepBuilderFactory.get("simpleStep1")
.tasklet((contribution, chunkContext) -> {
log.info("#### This is simpleStep1. requestDate = {}", requestDate);
return RepeatStatus.FINISHED;
}).build();
}
@StepScope
- Tasklet이나 ItemReader, ItemWriter, ItemProcessor에서 사용
@Bean
public Step simpleStep2(){
return stepBuilderFactory.get("simpleStep2")
.tasklet(simpleStep2Tasklet(null))
.build();
}
@Bean
@StepScope
public Tasklet simpleStep2Tasklet(@Value("#{jobParameters[requestDate]}") String requestDate) {
return (contribution, chunkContext) -> {
log.info("#### This is simpleStep2. requestDate = {}", requestDate);
return RepeatStatus.FINISHED;
};
}
Scope를 사용하면, 애플리케이션이 실행될때 Bean으로 생성되어 등록되는 것이 아닌 해당 기능의 실행시점(Job/Scope)에 Bean을 생성한다. 즉 StepScope는 Step 실행시점에 해당 컴포넌트가 Bean으로 생성되고, JobScope는 Job의 실행시점에 컴포넌트가 Bean으로 생성된다.
위의 코드를 보면 JobParameter에 null를 할당하는 것을 볼 수 있는데, 애플리케이션 실행시에 JobParameter가 할당되지 않기 때문이다. JobParameter는 @StepScope, @JobScope Bean을 생성할때만 생성된다.
intellij 사용시 아래와 같이 Program arguments 란에서 jobParameter(requestDate)를 넘길 수 있음
반응형
'프로그래밍 노트 > SPRING' 카테고리의 다른 글
[Spring] 스프링의 트랜잭션 기술 (0) | 2022.04.16 |
---|---|
Master/Slave DB 라우팅/이용하기(feat. AbstractRoutingDataSource) (0) | 2022.04.03 |
[Spring] 스프링MVC 기본 설정(xml, java config) (0) | 2020.12.21 |
[Spring] 스프링이란? Spring MVC 동작방식 (0) | 2020.12.19 |
[Spring] AOP_3 : @AOP (0) | 2020.04.06 |