From 694d89f579346178f02283f727d8fe8be65a98ff Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Mon, 23 Mar 2026 17:09:19 +0900 Subject: [PATCH 1/2] =?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); } -- 2.45.2 From 93edd6d9c8101d27626ff92508d62105e534bee6 Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Mon, 23 Mar 2026 17:12:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=EB=A6=B4=EB=A6=AC=EC=A6=88=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/RELEASE-NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/RELEASE-NOTES.md b/docs/RELEASE-NOTES.md index 1de9f12..acba93f 100644 --- a/docs/RELEASE-NOTES.md +++ b/docs/RELEASE-NOTES.md @@ -38,6 +38,7 @@ - 선박제원정보 수집 배치 작업 병렬화 (Partitioned Step) (#64) ### 수정 +- 기간 설정 재수집 시 RECOLLECT 모드 분기 오류 수정 (#75) - 자동 재수집 JobParameter 오버플로우 수정 (VARCHAR 2500 제한 해결) - retryCount 세마틱 오류 수정 (0부터 시작, 재수집 실패 시 증가) - 실패 레코드 저장 타이밍 경합 해결 (동기 저장으로 변경) -- 2.45.2