기존의 인터넷에 돌아다니는 코드들을 가져다가 쓸 수가 없음.
새로운 버젼이 출시 되어 문법이 바뀌었는지 확인
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()));
}
}