From 8cd6742b5317922f4da05535034f9bf5bee55023 Mon Sep 17 00:00:00 2001 From: kimjihun Date: Sun, 4 Aug 2024 22:28:59 +0900 Subject: [PATCH] =?UTF-8?q?*=20=EC=97=91=EC=85=80=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=A9=EC=A7=80=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20close=20#5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbatch/batch/ExcelRowReader.java | 18 ++++++++++++++++-- .../springbatch/batch/ExcelRowWriter.java | 2 +- .../example/springbatch/batch/FifthBatch.java | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) 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