spring boot 3.0.6 에서 Batch 사용

qkrrnjswo·2023년 5월 15일
1

트러블 슈팅

목록 보기
2/3

문제

기존의 인터넷에 돌아다니는 코드들을 가져다가 쓸 수가 없음.

해결

새로운 버젼이 출시 되어 문법이 바뀌었는지 확인

Spring Batch 5.0.0 발표 22.09.22

https://spring.io/blog/2022/09/22/spring-batch-5-0-0-m6-and-4-3-7-are-out

새로운 기능 문서

https://docs.spring.io/spring-batch/docs/current/reference/html/whatsnew.html

기존의 코드

@Configuration
@RequiredArgsConstructor
@Slf4j
public class MemberBatchJobConfig {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;
    private final MemberService memberService;
    @Value("${chunkSize:1000}")
    private int getChunkSize;
    @Bean
    public Job memberJob() {
        return jobBuilderFactory.get("memberJob")
                .start(memberStep())
                .build();
    }
    @Bean
    @JobScope
    public Step memberStep() {
        return this.stepBuilderFactory.get("memberStep")
                .<Member, Member>chunk(getChunkSize)
                .reader(this.memberReader())
                .writer(this.memberWireter())
                .build();
    }
    private ListItemReader<Member> memberReader() {
        return new ListItemReader<>(this.memberService.findAll());
    }
    @Bean
    public ItemWriter<Member> memberWriter() {
        return this::all;
    }
    private void all(final List<? extends Member> list) {
        list.forEach(item -> { log.info(item);});
    }
}

새로운 코드

@Configuration
@RequiredArgsConstructor
@Slf4j
public class CustomJobConfig extends DefaultBatchConfiguration {
    private final MemberService memberService;
    @Value("${chunkSize:1000}")
    private int getChunkSize;
    @Bean
    public Job job(final JobRepository jobRepository, final Step sendSmsStackStep) {
        return new JobBuilder("job", jobRepository)
                .start(sendSmsStackStep)
                .build();
    }
    @Bean
    public Step step(final JobRepository jobRepository,
                     final PlatformTransactionManager transactionManager) {
        return new StepBuilder("step", jobRepository)
                .chunk(this.getChunkSize, transactionManager)
                .reader(this.memberReader())
                .writer(this.memberWriter())
                .build();
    }
    private ListItemReader<Member> memberReader() {
        return new ListItemReader<>(this.memberService.getAllMember());
    }
    @Bean
    public ItemWriter<Object> memberWriter() {
        return this::loggingAll;
    }
    private void loggingAll(final Chunk<?> objects) {
        objects.getItems().forEach(item -> log.info(item.toString()));
    }
}

출처: https://uriu.tistory.com/428

0개의 댓글