@Bean
public Step exampleStep() {
return stepBuilderFactory.get("exampleStep")
.<Entity, Entity>chunk(1000)
.reader(jpaPagingItemReader())
.writer(jpaItemWriter())
.transactionAttribute(new DefaultTransactionAttribute(TransactionDefinition.PROPAGATION_REQUIRED, true))
.build();
}
JpaPagingItemReader<Entity> reader = new JpaPagingItemReaderBuilder<Entity>()
.name("jpaPagingItemReader")
.entityManagerFactory(entityManagerFactory)
.queryString("SELECT e FROM Entity e ORDER BY e.id ASC")
.pageSize(1000) // 페이징 크기
.build();
.pageSize(1000) // 동일하게 설정
chunk(1000) // 동일하게 설정
해결 방법:
SELECT e FROM Entity e WHERE e.createdAt >= :startTime AND e.createdAt < :endTime ORDER BY e.id ASC

@Bean
public JpaPagingItemReader<Entity> jpaPagingItemReader(EntityManagerFactory entityManagerFactory) {
return new JpaPagingItemReaderBuilder<Entity>()
.name("jpaPagingItemReader")
.entityManagerFactory(entityManagerFactory)
.queryString("SELECT e FROM Entity e WHERE e.createdAt >= :startTime AND e.createdAt < :endTime ORDER BY e.id ASC")
.parameterValues(Map.of("startTime", startTime, "endTime", endTime))
.pageSize(1000)
.build();
}
이렇게 설정하면 데이터 중복/누락 문제를 줄이고, 대량 데이터를 효율적으로 처리할 수 있습니다. 😊