728x90
반응형
Spring Batch 실행 시 아래와 같은 오류가 발생했습니다.
org.springframework.dao.EmptyResultDataAccessException: Item 0 of 500 did not update any rows: [...]
at org.mybatis.spring.batch.MyBatisBatchItemWriter.write(MyBatisBatchItemWriter.java:161)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:193)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:159)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:294)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:217)
at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:77)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:407)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:331)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
원인은 ItemWriter의 assertUpdates 때문이었습니다.
assertUpdates 속성은 아이템이 데이터베이스에서 업데이트하거나 삭제하지 않을 경우 예외를 발생시킬지 여부를 결정하는 옵션인데, 기본값이 true입니다. (기본 값이 true일 때 발생하는 예외가 EmptyResultDataAccessException)
해당 작업은 아이템이 업데이트나 삭제를 하지 않아도 되는 작업이기 때문에, assertUpdates의 값을 false로 설정하여 예외를 피할 수 있습니다.
public MyBatisBatchItemWriter<...> deleteData() {
return new MyBatisBatchItemWriterBuilder<...>()
.sqlSessionFactory(getSqlSessionFactory())
.assertUpdates(false) //
.statementId(statementId)
.build();
}
728x90
반응형
'spring > spring batch' 카테고리의 다른 글
Spring Batch 5.0 마이그레이션 (0) | 2024.05.23 |
---|---|
[Spring Batch4] batch step에서 processor chaining하는 방법 (0) | 2022.02.04 |
[Spring Batch] step 중지/통과 하기 (0) | 2021.10.21 |
[Spring Batch4] 배치 Test를 위한 Configuration (0) | 2020.10.31 |
댓글