From 694d89f579346178f02283f727d8fe8be65a98ff Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Mon, 23 Mar 2026 17:09:19 +0900 Subject: [PATCH] =?UTF-8?q?fix(shipdetail):=20=EA=B8=B0=EA=B0=84=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=9E=AC=EC=88=98=EC=A7=91=20=EC=8B=9C=20?= =?UTF-8?q?RECOLLECT=20=EB=AA=A8=EB=93=9C=20=EB=B6=84=EA=B8=B0=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기간 재수집(executor=MANUAL)에서 실패건 재수집(AUTO_RETRY/MANUAL_RETRY) 로직을 타면서 sourceJobExecutionId 없이 0건 종료되던 문제 수정. 실패건 재수집만 DB 조회, 기간 재수집은 Maritime API 호출로 분기. Closes #75 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../batch/config/ShipDetailImoFetchTasklet.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/snp/batch/jobs/shipdetail/batch/config/ShipDetailImoFetchTasklet.java b/src/main/java/com/snp/batch/jobs/shipdetail/batch/config/ShipDetailImoFetchTasklet.java index 22ece70..713307d 100644 --- a/src/main/java/com/snp/batch/jobs/shipdetail/batch/config/ShipDetailImoFetchTasklet.java +++ b/src/main/java/com/snp/batch/jobs/shipdetail/batch/config/ShipDetailImoFetchTasklet.java @@ -28,7 +28,8 @@ import java.util.stream.Collectors; /** * 선박제원정보 변경 IMO 목록 조회 Tasklet. * NORMAL 모드: Maritime API에서 변경된 IMO 번호 조회 - * RECOLLECT 모드: DB에서 실패 IMO 번호 조회 + * RECOLLECT + 실패건 재수집(AUTO_RETRY/MANUAL_RETRY): DB에서 실패 IMO 번호 조회 + * RECOLLECT + 기간 재수집(MANUAL 등): Maritime API에서 설정된 기간의 IMO 번호 조회 * 조회 결과를 JobExecutionContext에 저장하여 Partitioner가 사용할 수 있게 함. */ @Slf4j @@ -64,11 +65,17 @@ public class ShipDetailImoFetchTasklet implements Tasklet { String executionMode = jobExecution.getJobParameters() .getString("executionMode", "NORMAL"); + String executor = jobExecution.getJobParameters().getString("executor", ""); + boolean isFailedRecordRetry = "AUTO_RETRY".equals(executor) || "MANUAL_RETRY".equals(executor); + List imoNumbers; - if ("RECOLLECT".equals(executionMode)) { + if ("RECOLLECT".equals(executionMode) && isFailedRecordRetry) { + // 실패건 재수집: DB에서 실패 IMO 조회 imoNumbers = fetchRecollectImoNumbers(jobExecution); } else { + // NORMAL 모드 또는 기간 재수집: Maritime API에서 IMO 조회 + // BatchDateService가 executionMode에 따라 적절한 날짜 범위를 결정 imoNumbers = fetchChangedImoNumbers(jobExecution); }