diff --git a/src/main/java/com/example/springbatch/batch/ExcelRowReader.java b/src/main/java/com/example/springbatch/batch/ExcelRowReader.java index eb5b347..70be5c9 100644 --- a/src/main/java/com/example/springbatch/batch/ExcelRowReader.java +++ b/src/main/java/com/example/springbatch/batch/ExcelRowReader.java @@ -18,11 +18,13 @@ public class ExcelRowReader implements ItemStreamReader { private FileInputStream fileInputStream; private Workbook workbook; private Iterator rowCursor; - + private int currentRowNumber; + private final String CURRENT_ROW_KEY = "current.row.number"; public ExcelRowReader(String filePath) throws IOException { this.filePath = filePath; + this.currentRowNumber = 0; } @Override @@ -34,10 +36,16 @@ public class ExcelRowReader implements ItemStreamReader { Sheet sheet = workbook.getSheetAt(0); this.rowCursor = sheet.iterator(); + // 동일 배치 파라미터에 대해 특정 키 값 "current.row.number"의 값이 존재한다면 초기화 + if (executionContext.containsKey(CURRENT_ROW_KEY)) { + currentRowNumber = executionContext.getInt(CURRENT_ROW_KEY); + } - if (rowCursor.hasNext()) { + // 위의 값을 가져와 이미 실행한 부분은 건너 뜀 + for (int i = 0; i < currentRowNumber && rowCursor.hasNext(); i++) { rowCursor.next(); } + } catch (IOException e) { throw new ItemStreamException(e); } @@ -47,12 +55,18 @@ public class ExcelRowReader implements ItemStreamReader { public Row read() { if (rowCursor != null && rowCursor.hasNext()) { + currentRowNumber++; return rowCursor.next(); } else { return null; } } + @Override + public void update(ExecutionContext executionContext) throws ItemStreamException { + executionContext.putInt(CURRENT_ROW_KEY, currentRowNumber); + } + @Override public void close() throws ItemStreamException { diff --git a/src/main/java/com/example/springbatch/batch/ExcelRowWriter.java b/src/main/java/com/example/springbatch/batch/ExcelRowWriter.java index f2c7e51..2499e3f 100644 --- a/src/main/java/com/example/springbatch/batch/ExcelRowWriter.java +++ b/src/main/java/com/example/springbatch/batch/ExcelRowWriter.java @@ -32,7 +32,7 @@ public class ExcelRowWriter implements ItemStreamWriter { } @Override - public void write(Chunk chunk) throws Exception { + public void write(Chunk chunk) { for (BeforeEntity entity : chunk) { Row row = sheet.createRow(rowIndex++); row.createCell(0).setCellValue(entity.getUsername()); diff --git a/src/main/java/com/example/springbatch/batch/FifthBatch.java b/src/main/java/com/example/springbatch/batch/FifthBatch.java index a66083a..90c6d4e 100644 --- a/src/main/java/com/example/springbatch/batch/FifthBatch.java +++ b/src/main/java/com/example/springbatch/batch/FifthBatch.java @@ -83,4 +83,4 @@ public class FifthBatch { throw new RuntimeException(e); } } -} +} \ No newline at end of file