From edef10e4bcaaaf5cbdbb06ab4b62561def77c0ea Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Mon, 23 Mar 2026 17:24:39 +0900 Subject: [PATCH] =?UTF-8?q?refactor(batch):=20BaseSyncReader=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EB=B0=8F=20Reader=20=EC=B2=AD=ED=81=AC=20=EA=B2=BD?= =?UTF-8?q?=EA=B3=84=20=EC=A0=9C=EC=96=B4=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문제: GroupByExecutionIdPolicy 사용 시 Reader가 다음 그룹 데이터를 미리 로드하면서 N→P 전환이 청크 분리보다 먼저 발생하여, 한 청크에 여러 job_execution_id가 섞이는 경우 P 상태 고착 발생 해결: Reader 자체에서 peek/fetch 2단계로 청크 경계를 제어 - BaseSyncReader 추상 클래스 추출 (peek → fetch 2단계 분리) - 47개 Reader를 BaseSyncReader 상속으로 변환 (-1,600줄 중복 제거) - GroupByExecutionIdPolicy/ReadListener/ChunkListener를 Step에서 제거 - chunk(GroupByExecutionIdPolicy) → chunk(chunkSize) 변경 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../common/batch/reader/BaseSyncReader.java | 127 ++++++++++ .../batch/code/config/CodeSyncJobConfig.java | 11 +- .../batch/code/reader/FlagCodeReader.java | 66 ++--- .../batch/code/reader/Stat5CodeReader.java | 80 ++---- .../CompanyComplianceSyncJobConfig.java | 7 +- .../config/ShipComplianceSyncJobConfig.java | 7 +- .../reader/CompanyComplianceReader.java | 90 +++---- .../reader/ShipComplianceReader.java | 128 ++++------ .../event/config/EventSyncJobConfig.java | 19 +- .../batch/event/reader/EventCargoReader.java | 76 ++---- .../reader/EventHumanCasualtyReader.java | 66 ++--- .../batch/event/reader/EventReader.java | 147 +++++------ .../event/reader/EventRelationshipReader.java | 70 ++---- .../config/FacilitySyncJobConfig.java | 7 +- .../facility/reader/FacilityPortReader.java | 161 +++++------- .../config/AnchorageCallSyncJobConfig.java | 7 +- .../config/BerthCallSyncJobConfig.java | 7 +- .../config/CurrentlyAtSyncJobConfig.java | 7 +- .../config/DestinationSyncJobConfig.java | 7 +- .../config/PortCallSyncJobConfig.java | 7 +- .../config/StsOperationSyncJobConfig.java | 7 +- .../config/TerminalCallSyncJobConfig.java | 7 +- .../movement/config/TransitSyncJobConfig.java | 7 +- .../movement/reader/AnchorageCallReader.java | 95 +++---- .../movement/reader/BerthCallReader.java | 96 +++----- .../movement/reader/CurrentlyAtReader.java | 100 +++----- .../movement/reader/DestinationReader.java | 82 ++---- .../batch/movement/reader/PortCallReader.java | 100 +++----- .../movement/reader/StsOperationReader.java | 98 +++----- .../movement/reader/TerminalCallReader.java | 102 +++----- .../batch/movement/reader/TransitReader.java | 70 ++---- .../batch/psc/config/PscSyncJobConfig.java | 15 +- .../psc/reader/PscAllCertificateReader.java | 100 +++----- .../batch/psc/reader/PscDefectReader.java | 104 +++----- .../batch/psc/reader/PscDetailReader.java | 122 ++++----- .../batch/risk/config/RiskSyncJobConfig.java | 7 +- .../batch/risk/reader/RiskReader.java | 142 +++++------ .../ship/config/ShipDetailSyncJobConfig.java | 107 ++------ .../reader/BareboatCharterHistoryReader.java | 72 ++---- .../reader/CallsignAndMmsiHistoryReader.java | 72 ++---- .../batch/ship/reader/ClassHistoryReader.java | 78 ++---- .../CompanyVesselRelationshipsReader.java | 104 +++----- .../batch/ship/reader/CrewListReader.java | 86 ++----- .../reader/DarkActivityConfirmedReader.java | 114 +++------ .../batch/ship/reader/FlagHistoryReader.java | 72 ++---- .../GroupBeneficialOwnerHistoryReader.java | 74 ++---- .../batch/ship/reader/IceClassReader.java | 68 ++--- .../batch/ship/reader/NameHistoryReader.java | 70 ++---- .../ship/reader/OperatorHistoryReader.java | 74 ++---- .../batch/ship/reader/OwnerHistoryReader.java | 74 ++---- .../batch/ship/reader/PandIHistoryReader.java | 74 ++---- ...SafetyManagementCertificateHistReader.java | 90 ++----- .../batch/ship/reader/ShipAddInfoReader.java | 90 ++----- .../batch/ship/reader/ShipDataReader.java | 233 ++++++++---------- .../ship/reader/ShipManagerHistoryReader.java | 74 ++---- .../ship/reader/SisterShipLinksReader.java | 62 ++--- .../ship/reader/SpecialFeatureReader.java | 66 ++--- .../ship/reader/StatusHistoryReader.java | 68 ++--- .../ship/reader/StowageCommodityReader.java | 70 ++---- .../SurveyDatesHistoryUniqueReader.java | 68 ++--- .../batch/ship/reader/SurveyDatesReader.java | 74 ++---- .../ship/reader/TbCompanyDetailReader.java | 116 ++++----- .../reader/TechnicalManagerHistoryReader.java | 70 ++---- .../batch/ship/reader/ThrustersReader.java | 76 ++---- 64 files changed, 1526 insertions(+), 3121 deletions(-) create mode 100644 src/main/java/com/snp/batch/common/batch/reader/BaseSyncReader.java diff --git a/src/main/java/com/snp/batch/common/batch/reader/BaseSyncReader.java b/src/main/java/com/snp/batch/common/batch/reader/BaseSyncReader.java new file mode 100644 index 0000000..d89662b --- /dev/null +++ b/src/main/java/com/snp/batch/common/batch/reader/BaseSyncReader.java @@ -0,0 +1,127 @@ +package com.snp.batch.common.batch.reader; + +import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.util.JobExecutionGroupable; +import com.snp.batch.common.util.TableMetaInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.batch.item.ItemReader; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * 동기화 Reader 추상 클래스 + * + * job_execution_id 단위로 청크를 분리하는 2단계 read 방식: + * 1단계 (peek): 다음 그룹 ID만 조회, 현재 그룹과 다르면 null 반환 (청크 종료) + * 2단계 (fetch): 데이터 로드 + batch_flag N→P 전환 + * + * GroupByExecutionIdPolicy를 대체하여 Reader 자체에서 청크 경계를 제어한다. + * + * @param DTO 타입 (JobExecutionGroupable 구현 필요) + */ +@Slf4j +public abstract class BaseSyncReader implements ItemReader { + + protected final TableMetaInfo tableMetaInfo; + protected final JdbcTemplate businessJdbcTemplate; + + private List allDataBuffer = new ArrayList<>(); + private Long currentGroupId = null; + private Long pendingGroupId = null; + + protected BaseSyncReader(DataSource businessDataSource, TableMetaInfo tableMetaInfo) { + this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); + this.tableMetaInfo = tableMetaInfo; + } + + /** + * 소스 테이블명 반환 (예: tableMetaInfo.sourceIceClass) + */ + protected abstract String getSourceTable(); + + /** + * ResultSet → DTO 매핑 + * + * @param rs ResultSet (현재 row) + * @param targetId job_execution_id (DTO의 jobExecutionId 필드에 설정) + * @return 매핑된 DTO 객체 + */ + protected abstract T mapRow(ResultSet rs, Long targetId) throws SQLException; + + /** + * 로그 접두사 (예: "IceClassReader") + */ + protected String getLogPrefix() { + return getClass().getSimpleName(); + } + + @Override + public T read() throws Exception { + // 1. buffer가 비어있으면 다음 그룹 확인 + if (allDataBuffer.isEmpty()) { + // pending이 있으면 (이전 청크에서 감지된 다음 그룹) 바로 로드 + if (pendingGroupId != null) { + fetchAndTransition(pendingGroupId); + currentGroupId = pendingGroupId; + pendingGroupId = null; + } else { + // 다음 그룹 ID peek + Long nextId = peekNextGroupId(); + if (nextId == null) { + // 더 이상 처리할 데이터 없음 + currentGroupId = null; + return null; + } + + if (currentGroupId != null && !currentGroupId.equals(nextId)) { + // 다른 그룹 발견 → 현재 청크 종료, 다음 청크에서 처리 + pendingGroupId = nextId; + currentGroupId = null; + return null; + } + + // 같은 그룹이거나 첫 호출 → 로드 + fetchAndTransition(nextId); + currentGroupId = nextId; + } + } + + if (allDataBuffer.isEmpty()) { + return null; + } + + return allDataBuffer.remove(0); + } + + /** + * 다음 처리 대상 job_execution_id 조회 (데이터 로드/전환 없음) + */ + private Long peekNextGroupId() { + try { + return businessJdbcTemplate.queryForObject( + CommonSql.getNextTargetQuery(getSourceTable()), Long.class); + } catch (Exception e) { + return null; + } + } + + /** + * 데이터 로드 + batch_flag N→P 전환 + */ + private void fetchAndTransition(Long targetId) { + log.info("[{}] 다음 처리 대상 ID 발견: {}", getLogPrefix(), targetId); + + String sql = CommonSql.getTargetDataQuery(getSourceTable()); + this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> + mapRow(rs, targetId), targetId); + + // N→P 전환 + String updateSql = CommonSql.getProcessBatchQuery(getSourceTable()); + businessJdbcTemplate.update(updateSql, targetId); + } +} diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/code/config/CodeSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/code/config/CodeSyncJobConfig.java index 9d61e74..60eab6a 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/code/config/CodeSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/code/config/CodeSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.code.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.code.dto.FlagCodeDto; import com.snp.batch.jobs.datasync.batch.code.dto.Stat5CodeDto; @@ -129,12 +126,10 @@ public class CodeSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(flagCodeWriteListener()) .build(); } @@ -143,12 +138,10 @@ public class CodeSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(stat5CodeReader(businessDataSource, tableMetaInfo)) .processor(new Stat5CodeProcessor()) .writer(new Stat5CodeWriter(codeRepository)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(stat5CodeWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/FlagCodeReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/FlagCodeReader.java index 0062535..e5702e6 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/FlagCodeReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/FlagCodeReader.java @@ -1,68 +1,36 @@ package com.snp.batch.jobs.datasync.batch.code.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.code.dto.FlagCodeDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class FlagCodeReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class FlagCodeReader extends BaseSyncReader { public FlagCodeReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public FlagCodeDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceFlagCode; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceFlagCode), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[FlagCodeReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceFlagCode); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return FlagCodeDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .shipCountryCd(rs.getString("ship_country_cd")) - .cdNm(rs.getString("cd_nm")) - .isoTwoCd(rs.getString("iso_two_cd")) - .isoThrCd(rs.getString("iso_thr_cd")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceFlagCode); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected FlagCodeDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return FlagCodeDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .shipCountryCd(rs.getString("ship_country_cd")) + .cdNm(rs.getString("cd_nm")) + .isoTwoCd(rs.getString("iso_two_cd")) + .isoThrCd(rs.getString("iso_thr_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/Stat5CodeReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/Stat5CodeReader.java index 29020cd..d149fc5 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/Stat5CodeReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/code/reader/Stat5CodeReader.java @@ -1,75 +1,43 @@ package com.snp.batch.jobs.datasync.batch.code.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.code.dto.Stat5CodeDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class Stat5CodeReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class Stat5CodeReader extends BaseSyncReader { public Stat5CodeReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public Stat5CodeDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceStat5Code; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceStat5Code), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[Stat5CodeReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceStat5Code); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return Stat5CodeDto.builder() - .jobExecutionId(targetId) - .lvOne(rs.getString("lv_one")) - .lvOneDesc(rs.getString("lv_one_desc")) - .lvTwo(rs.getString("lv_two")) - .lvTwoDesc(rs.getString("lv_two_desc")) - .lvThr(rs.getString("lv_thr")) - .lvThrDesc(rs.getString("lv_thr_desc")) - .lvFour(rs.getString("lv_four")) - .lvFourDesc(rs.getString("lv_four_desc")) - .lvFive(rs.getString("lv_five")) - .lvFiveDesc(rs.getString("lv_five_desc")) - .dtlDesc(rs.getString("dtl_desc")) - .rlsIem(rs.getString("rls_iem")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceStat5Code); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected Stat5CodeDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return Stat5CodeDto.builder() + .jobExecutionId(targetId) + .lvOne(rs.getString("lv_one")) + .lvOneDesc(rs.getString("lv_one_desc")) + .lvTwo(rs.getString("lv_two")) + .lvTwoDesc(rs.getString("lv_two_desc")) + .lvThr(rs.getString("lv_thr")) + .lvThrDesc(rs.getString("lv_thr_desc")) + .lvFour(rs.getString("lv_four")) + .lvFourDesc(rs.getString("lv_four_desc")) + .lvFive(rs.getString("lv_five")) + .lvFiveDesc(rs.getString("lv_five_desc")) + .dtlDesc(rs.getString("dtl_desc")) + .rlsIem(rs.getString("rls_iem")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/CompanyComplianceSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/CompanyComplianceSyncJobConfig.java index aa2c1e3..44e0a78 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/CompanyComplianceSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/CompanyComplianceSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.compliance.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.compliance.dto.CompanyComplianceDto; import com.snp.batch.jobs.datasync.batch.compliance.entity.CompanyComplianceEntity; @@ -109,12 +106,10 @@ public class CompanyComplianceSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(companyComplianceWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/ShipComplianceSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/ShipComplianceSyncJobConfig.java index fc90f41..4ecaca4 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/ShipComplianceSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/config/ShipComplianceSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.compliance.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.compliance.dto.ShipComplianceDto; import com.snp.batch.jobs.datasync.batch.compliance.entity.ShipComplianceEntity; @@ -109,12 +106,10 @@ public class ShipComplianceSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(shipComplianceWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/CompanyComplianceReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/CompanyComplianceReader.java index 4d1cd7e..8f96760 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/CompanyComplianceReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/CompanyComplianceReader.java @@ -1,82 +1,50 @@ package com.snp.batch.jobs.datasync.batch.compliance.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.compliance.dto.CompanyComplianceDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class CompanyComplianceReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class CompanyComplianceReader extends BaseSyncReader { public CompanyComplianceReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public CompanyComplianceDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTbCompanyComplianceInfo; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTbCompanyComplianceInfo), Long.class); - } catch (Exception e) { - return; - } + @Override + protected CompanyComplianceDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp lstMdfcnDtTs = rs.getTimestamp("lst_mdfcn_dt"); - if (nextTargetId != null) { - log.info("[CompanyComplianceReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTbCompanyComplianceInfo); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp lstMdfcnDtTs = rs.getTimestamp("lst_mdfcn_dt"); - - return CompanyComplianceDto.builder() - .jobExecutionId(targetId) - .companyCd(rs.getString("company_cd")) - .lstMdfcnDt(lstMdfcnDtTs != null ? lstMdfcnDtTs.toLocalDateTime() : null) - .companySnthsComplianceStatus(rs.getObject("company_snths_compliance_status") != null ? rs.getLong("company_snths_compliance_status") : null) - .companyAusSanctionList(rs.getObject("company_aus_sanction_list") != null ? rs.getLong("company_aus_sanction_list") : null) - .companyBesSanctionList(rs.getObject("company_bes_sanction_list") != null ? rs.getLong("company_bes_sanction_list") : null) - .companyCanSanctionList(rs.getObject("company_can_sanction_list") != null ? rs.getLong("company_can_sanction_list") : null) - .companyOfacSanctionCountry(rs.getObject("company_ofac_sanction_country") != null ? rs.getLong("company_ofac_sanction_country") : null) - .companyFatfCmptncCountry(rs.getObject("company_fatf_cmptnc_country") != null ? rs.getLong("company_fatf_cmptnc_country") : null) - .companyEuSanctionList(rs.getObject("company_eu_sanction_list") != null ? rs.getLong("company_eu_sanction_list") : null) - .companyOfacSanctionList(rs.getObject("company_ofac_sanction_list") != null ? rs.getLong("company_ofac_sanction_list") : null) - .companyOfacNonSdnSanctionList(rs.getObject("company_ofac_non_sdn_sanction_list") != null ? rs.getLong("company_ofac_non_sdn_sanction_list") : null) - .companyOfacssiSanctionList(rs.getObject("company_ofacssi_sanction_list") != null ? rs.getLong("company_ofacssi_sanction_list") : null) - .companySwissSanctionList(rs.getObject("company_swiss_sanction_list") != null ? rs.getLong("company_swiss_sanction_list") : null) - .companyUaeSanctionList(rs.getObject("company_uae_sanction_list") != null ? rs.getLong("company_uae_sanction_list") : null) - .companyUnSanctionList(rs.getObject("company_un_sanction_list") != null ? rs.getLong("company_un_sanction_list") : null) - .prntCompanyComplianceRisk(rs.getObject("prnt_company_compliance_risk") != null ? rs.getLong("prnt_company_compliance_risk") : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTbCompanyComplianceInfo); - businessJdbcTemplate.update(sql, targetExecutionId); + return CompanyComplianceDto.builder() + .jobExecutionId(targetId) + .companyCd(rs.getString("company_cd")) + .lstMdfcnDt(lstMdfcnDtTs != null ? lstMdfcnDtTs.toLocalDateTime() : null) + .companySnthsComplianceStatus(rs.getObject("company_snths_compliance_status") != null ? rs.getLong("company_snths_compliance_status") : null) + .companyAusSanctionList(rs.getObject("company_aus_sanction_list") != null ? rs.getLong("company_aus_sanction_list") : null) + .companyBesSanctionList(rs.getObject("company_bes_sanction_list") != null ? rs.getLong("company_bes_sanction_list") : null) + .companyCanSanctionList(rs.getObject("company_can_sanction_list") != null ? rs.getLong("company_can_sanction_list") : null) + .companyOfacSanctionCountry(rs.getObject("company_ofac_sanction_country") != null ? rs.getLong("company_ofac_sanction_country") : null) + .companyFatfCmptncCountry(rs.getObject("company_fatf_cmptnc_country") != null ? rs.getLong("company_fatf_cmptnc_country") : null) + .companyEuSanctionList(rs.getObject("company_eu_sanction_list") != null ? rs.getLong("company_eu_sanction_list") : null) + .companyOfacSanctionList(rs.getObject("company_ofac_sanction_list") != null ? rs.getLong("company_ofac_sanction_list") : null) + .companyOfacNonSdnSanctionList(rs.getObject("company_ofac_non_sdn_sanction_list") != null ? rs.getLong("company_ofac_non_sdn_sanction_list") : null) + .companyOfacssiSanctionList(rs.getObject("company_ofacssi_sanction_list") != null ? rs.getLong("company_ofacssi_sanction_list") : null) + .companySwissSanctionList(rs.getObject("company_swiss_sanction_list") != null ? rs.getLong("company_swiss_sanction_list") : null) + .companyUaeSanctionList(rs.getObject("company_uae_sanction_list") != null ? rs.getLong("company_uae_sanction_list") : null) + .companyUnSanctionList(rs.getObject("company_un_sanction_list") != null ? rs.getLong("company_un_sanction_list") : null) + .prntCompanyComplianceRisk(rs.getObject("prnt_company_compliance_risk") != null ? rs.getLong("prnt_company_compliance_risk") : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/ShipComplianceReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/ShipComplianceReader.java index 24f2479..6b65534 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/ShipComplianceReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/compliance/reader/ShipComplianceReader.java @@ -1,101 +1,69 @@ package com.snp.batch.jobs.datasync.batch.compliance.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.compliance.dto.ShipComplianceDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class ShipComplianceReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ShipComplianceReader extends BaseSyncReader { public ShipComplianceReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ShipComplianceDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceCompliance; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceCompliance), Long.class); - } catch (Exception e) { - return; - } + @Override + protected ShipComplianceDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - if (nextTargetId != null) { - log.info("[ShipComplianceReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceCompliance); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - - return ShipComplianceDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) - .lglSnthsSanction(rs.getString("lgl_snths_sanction")) - .shipBesSanctionList(rs.getString("ship_bes_sanction_list")) - .shipDarkActvInd(rs.getString("ship_dark_actv_ind")) - .shipDtldInfoNtmntd(rs.getString("ship_dtld_info_ntmntd")) - .shipEuSanctionList(rs.getString("ship_eu_sanction_list")) - .shipFlgDspt(rs.getString("ship_flg_dspt")) - .shipFlgSanctionCountry(rs.getString("ship_flg_sanction_country")) - .shipFlgSanctionCountryHstry(rs.getString("ship_flg_sanction_country_hstry")) - .shipOfacNonSdnSanctionList(rs.getString("ship_ofac_non_sdn_sanction_list")) - .shipOfacSanctionList(rs.getString("ship_ofac_sanction_list")) - .shipOfacCutnList(rs.getString("ship_ofac_cutn_list")) - .shipOwnrOfcsSanctionList(rs.getString("ship_ownr_ofcs_sanction_list")) - .shipOwnrAusSanctionList(rs.getString("ship_ownr_aus_sanction_list")) - .shipOwnrBesSanctionList(rs.getString("ship_ownr_bes_sanction_list")) - .shipOwnrCanSanctionList(rs.getString("ship_ownr_can_sanction_list")) - .shipOwnrEuSanctionList(rs.getString("ship_ownr_eu_sanction_list")) - .shipOwnrFatfRglZone(rs.getString("ship_ownr_fatf_rgl_zone")) - .shipOwnrOfacSanctionHstry(rs.getString("ship_ownr_ofac_sanction_hstry")) - .shipOwnrOfacSanctionList(rs.getString("ship_ownr_ofac_sanction_list")) - .shipOwnrOfacSanctionCountry(rs.getString("ship_ownr_ofac_sanction_country")) - .shipOwnrPrntCompanyNcmplnc(rs.getString("ship_ownr_prnt_company_ncmplnc")) - .shipOwnrPrntCompanyFatfRglZone(rs.getString("ship_ownr_prnt_company_fatf_rgl_zone")) - .shipOwnrPrntCompanyOfacSanctionCountry(rs.getString("ship_ownr_prnt_company_ofac_sanction_country")) - .shipOwnrSwiSanctionList(rs.getString("ship_ownr_swi_sanction_list")) - .shipOwnrUaeSanctionList(rs.getString("ship_ownr_uae_sanction_list")) - .shipOwnrUnSanctionList(rs.getString("ship_ownr_un_sanction_list")) - .shipSanctionCountryPrtcllLastTwelveM(rs.getString("ship_sanction_country_prtcll_last_twelve_m")) - .shipSanctionCountryPrtcllLastThrM(rs.getString("ship_sanction_country_prtcll_last_thr_m")) - .shipSanctionCountryPrtcllLastSixM(rs.getString("ship_sanction_country_prtcll_last_six_m")) - .shipScrtyLglDsptEvent(rs.getString("ship_scrty_lgl_dspt_event")) - .shipStsPrtnrNonComplianceTwelveM(rs.getString("ship_sts_prtnr_non_compliance_twelve_m")) - .shipSwiSanctionList(rs.getString("ship_swi_sanction_list")) - .shipUnSanctionList(rs.getString("ship_un_sanction_list")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceCompliance); - businessJdbcTemplate.update(sql, targetExecutionId); + return ShipComplianceDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) + .lglSnthsSanction(rs.getString("lgl_snths_sanction")) + .shipBesSanctionList(rs.getString("ship_bes_sanction_list")) + .shipDarkActvInd(rs.getString("ship_dark_actv_ind")) + .shipDtldInfoNtmntd(rs.getString("ship_dtld_info_ntmntd")) + .shipEuSanctionList(rs.getString("ship_eu_sanction_list")) + .shipFlgDspt(rs.getString("ship_flg_dspt")) + .shipFlgSanctionCountry(rs.getString("ship_flg_sanction_country")) + .shipFlgSanctionCountryHstry(rs.getString("ship_flg_sanction_country_hstry")) + .shipOfacNonSdnSanctionList(rs.getString("ship_ofac_non_sdn_sanction_list")) + .shipOfacSanctionList(rs.getString("ship_ofac_sanction_list")) + .shipOfacCutnList(rs.getString("ship_ofac_cutn_list")) + .shipOwnrOfcsSanctionList(rs.getString("ship_ownr_ofcs_sanction_list")) + .shipOwnrAusSanctionList(rs.getString("ship_ownr_aus_sanction_list")) + .shipOwnrBesSanctionList(rs.getString("ship_ownr_bes_sanction_list")) + .shipOwnrCanSanctionList(rs.getString("ship_ownr_can_sanction_list")) + .shipOwnrEuSanctionList(rs.getString("ship_ownr_eu_sanction_list")) + .shipOwnrFatfRglZone(rs.getString("ship_ownr_fatf_rgl_zone")) + .shipOwnrOfacSanctionHstry(rs.getString("ship_ownr_ofac_sanction_hstry")) + .shipOwnrOfacSanctionList(rs.getString("ship_ownr_ofac_sanction_list")) + .shipOwnrOfacSanctionCountry(rs.getString("ship_ownr_ofac_sanction_country")) + .shipOwnrPrntCompanyNcmplnc(rs.getString("ship_ownr_prnt_company_ncmplnc")) + .shipOwnrPrntCompanyFatfRglZone(rs.getString("ship_ownr_prnt_company_fatf_rgl_zone")) + .shipOwnrPrntCompanyOfacSanctionCountry(rs.getString("ship_ownr_prnt_company_ofac_sanction_country")) + .shipOwnrSwiSanctionList(rs.getString("ship_ownr_swi_sanction_list")) + .shipOwnrUaeSanctionList(rs.getString("ship_ownr_uae_sanction_list")) + .shipOwnrUnSanctionList(rs.getString("ship_ownr_un_sanction_list")) + .shipSanctionCountryPrtcllLastTwelveM(rs.getString("ship_sanction_country_prtcll_last_twelve_m")) + .shipSanctionCountryPrtcllLastThrM(rs.getString("ship_sanction_country_prtcll_last_thr_m")) + .shipSanctionCountryPrtcllLastSixM(rs.getString("ship_sanction_country_prtcll_last_six_m")) + .shipScrtyLglDsptEvent(rs.getString("ship_scrty_lgl_dspt_event")) + .shipStsPrtnrNonComplianceTwelveM(rs.getString("ship_sts_prtnr_non_compliance_twelve_m")) + .shipSwiSanctionList(rs.getString("ship_swi_sanction_list")) + .shipUnSanctionList(rs.getString("ship_un_sanction_list")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/event/config/EventSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/event/config/EventSyncJobConfig.java index 45d9c82..e7f3ad6 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/event/config/EventSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/event/config/EventSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.event.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.event.dto.EventCargoDto; import com.snp.batch.jobs.datasync.batch.event.dto.EventDto; @@ -175,12 +172,10 @@ public class EventSyncJobConfig extends BaseJobConfig { public Step eventSyncStep() { log.info("Step 생성: eventSyncStep"); return new StepBuilder(getStepName(), jobRepository) - .chunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(eventWriteListener()) .build(); } @@ -189,12 +184,10 @@ public class EventSyncJobConfig extends BaseJobConfig { public Step eventCargoSyncStep() { log.info("Step 생성: eventCargoSyncStep"); return new StepBuilder("eventCargoSyncStep", jobRepository) - .chunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(eventCargoReader(businessDataSource, tableMetaInfo)) .processor(new EventCargoProcessor()) .writer(new EventCargoWriter(eventRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(eventCargoWriteListener()) .build(); } @@ -203,12 +196,10 @@ public class EventSyncJobConfig extends BaseJobConfig { public Step eventHumanCasualtySyncStep() { log.info("Step 생성: eventHumanCasualtySyncStep"); return new StepBuilder("eventHumanCasualtySyncStep", jobRepository) - .chunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(eventHumanCasualtyReader(businessDataSource, tableMetaInfo)) .processor(new EventHumanCasualtyProcessor()) .writer(new EventHumanCasualtyWriter(eventRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(eventHumanCasualtyWriteListener()) .build(); } @@ -217,12 +208,10 @@ public class EventSyncJobConfig extends BaseJobConfig { public Step eventRelationshipSyncStep() { log.info("Step 생성: eventRelationshipSyncStep"); return new StepBuilder("eventRelationshipSyncStep", jobRepository) - .chunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(eventRelationshipReader(businessDataSource, tableMetaInfo)) .processor(new EventRelationshipProcessor()) .writer(new EventRelationshipWriter(eventRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(eventRelationshipWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventCargoReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventCargoReader.java index af82b44..a428be8 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventCargoReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventCargoReader.java @@ -1,73 +1,41 @@ package com.snp.batch.jobs.datasync.batch.event.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.event.dto.EventCargoDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class EventCargoReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class EventCargoReader extends BaseSyncReader { public EventCargoReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public EventCargoDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceEventCargo; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceEventCargo), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[EventCargoReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceEventCargo); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return EventCargoDto.builder() - .jobExecutionId(targetId) - .eventId(rs.getObject("event_id") != null ? rs.getInt("event_id") : null) - .imoNo(rs.getString("imo_no")) - .type(rs.getString("type")) - .eventSeq(rs.getString("event_seq")) - .cnt(rs.getObject("cnt") != null ? rs.getLong("cnt") : null) - .unitAbbr(rs.getString("unit_abbr")) - .unit(rs.getString("unit")) - .cargoDamg(rs.getString("cargo_damg")) - .riskYn(rs.getString("risk_yn")) - .text(rs.getString("text")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceEventCargo); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected EventCargoDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return EventCargoDto.builder() + .jobExecutionId(targetId) + .eventId(rs.getObject("event_id") != null ? rs.getInt("event_id") : null) + .imoNo(rs.getString("imo_no")) + .type(rs.getString("type")) + .eventSeq(rs.getString("event_seq")) + .cnt(rs.getObject("cnt") != null ? rs.getLong("cnt") : null) + .unitAbbr(rs.getString("unit_abbr")) + .unit(rs.getString("unit")) + .cargoDamg(rs.getString("cargo_damg")) + .riskYn(rs.getString("risk_yn")) + .text(rs.getString("text")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventHumanCasualtyReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventHumanCasualtyReader.java index 3a00435..af6470e 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventHumanCasualtyReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventHumanCasualtyReader.java @@ -1,68 +1,36 @@ package com.snp.batch.jobs.datasync.batch.event.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.event.dto.EventHumanCasualtyDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class EventHumanCasualtyReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class EventHumanCasualtyReader extends BaseSyncReader { public EventHumanCasualtyReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public EventHumanCasualtyDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceEventHumanCasualty; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceEventHumanCasualty), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[EventHumanCasualtyReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceEventHumanCasualty); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return EventHumanCasualtyDto.builder() - .jobExecutionId(targetId) - .eventId(rs.getObject("event_id") != null ? rs.getLong("event_id") : null) - .type(rs.getString("type")) - .scope(rs.getString("scope")) - .qualfr(rs.getString("qualfr")) - .cnt(rs.getObject("cnt") != null ? rs.getLong("cnt") : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceEventHumanCasualty); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected EventHumanCasualtyDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return EventHumanCasualtyDto.builder() + .jobExecutionId(targetId) + .eventId(rs.getObject("event_id") != null ? rs.getLong("event_id") : null) + .type(rs.getString("type")) + .scope(rs.getString("scope")) + .qualfr(rs.getString("qualfr")) + .cnt(rs.getObject("cnt") != null ? rs.getLong("cnt") : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventReader.java index 04da68c..07277f5 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventReader.java @@ -1,110 +1,79 @@ package com.snp.batch.jobs.datasync.batch.event.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.event.dto.EventDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; +import java.time.ZoneId; @Slf4j -public class EventReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class EventReader extends BaseSyncReader { public EventReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public EventDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceEvent; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceEvent), Long.class); - } catch (Exception e) { - return; - } + @Override + protected EventDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp pstgYmdTs = rs.getTimestamp("pstg_ymd"); + Timestamp eventStartDayTs = rs.getTimestamp("event_start_day"); + Timestamp eventEndDayTs = rs.getTimestamp("event_end_day"); - if (nextTargetId != null) { - log.info("[EventReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceEvent); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp pstgYmdTs = rs.getTimestamp("pstg_ymd"); - Timestamp eventStartDayTs = rs.getTimestamp("event_start_day"); - Timestamp eventEndDayTs = rs.getTimestamp("event_end_day"); - - return EventDto.builder() - .jobExecutionId(targetId) - .eventId(rs.getObject("event_id") != null ? rs.getInt("event_id") : null) - .acdntId(rs.getString("acdnt_id")) - .imoNo(rs.getString("imo_no")) - .pstgYmd(pstgYmdTs != null ? pstgYmdTs.toInstant().atZone(java.time.ZoneId.systemDefault()) : null) - .eventStartDay(eventStartDayTs != null ? eventStartDayTs.toInstant().atZone(java.time.ZoneId.systemDefault()) : null) - .eventEndDay(eventEndDayTs != null ? eventEndDayTs.toInstant().atZone(java.time.ZoneId.systemDefault()) : null) - .embrkTryYn(rs.getString("embrk_try_yn")) - .cargoCapacityStatusCd(rs.getString("cargo_capacity_status_cd")) - .acdntActn(rs.getString("acdnt_actn")) - .acdntZone(rs.getString("acdnt_zone")) - .acdntZoneCd(rs.getString("acdnt_zone_cd")) - .cfgCmpntTwo(rs.getString("cfg_cmpnt_two")) - .countryCd(rs.getString("country_cd")) - .buildYmd(rs.getString("build_ymd")) - .desc(rs.getString("desc")) - .envPosition(rs.getString("env_position")) - .positionNm(rs.getString("position_nm")) - .masdGridRef(rs.getObject("masd_grid_ref") != null ? rs.getLong("masd_grid_ref") : null) - .ctyNm(rs.getString("cty_nm")) - .eventType(rs.getString("event_type")) - .eventTypeDtl(rs.getString("event_type_dtl")) - .eventTypeDtlId(rs.getObject("event_type_dtl_id") != null ? rs.getLong("event_type_dtl_id") : null) - .eventTypeId(rs.getObject("event_type_id") != null ? rs.getLong("event_type_id") : null) - .fireduponYn(rs.getString("firedupon_yn")) - .title(rs.getString("title")) - .ldtTimpt(rs.getObject("ldt_timpt") != null ? rs.getLong("ldt_timpt") : null) - .signfct(rs.getString("signfct")) - .wethr(rs.getString("wethr")) - .pltnMatral(rs.getString("pltn_matral")) - .pltnMatralCnt(rs.getObject("pltn_matral_cnt") != null ? rs.getLong("pltn_matral_cnt") : null) - .pltnMatralUnit(rs.getString("pltn_matral_unit")) - .regShponrCdHr(rs.getString("reg_shponr_cd_hr")) - .regShponrHr(rs.getString("reg_shponr_hr")) - .regShponrCountryCdHr(rs.getString("reg_shponr_country_cd_hr")) - .regShponrCountryHr(rs.getString("reg_shponr_country_hr")) - .shipDwt(rs.getObject("ship_dwt") != null ? rs.getLong("ship_dwt") : null) - .shipFlgCd(rs.getString("ship_flg_cd")) - .shipFlgDecd(rs.getString("ship_flg_decd")) - .shipGt(rs.getObject("ship_gt") != null ? rs.getLong("ship_gt") : null) - .shipNm(rs.getString("ship_nm")) - .shipType(rs.getString("ship_type")) - .shipTypeNm(rs.getString("ship_type_nm")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceEvent); - businessJdbcTemplate.update(sql, targetExecutionId); + return EventDto.builder() + .jobExecutionId(targetId) + .eventId(rs.getObject("event_id") != null ? rs.getInt("event_id") : null) + .acdntId(rs.getString("acdnt_id")) + .imoNo(rs.getString("imo_no")) + .pstgYmd(pstgYmdTs != null ? pstgYmdTs.toInstant().atZone(ZoneId.systemDefault()) : null) + .eventStartDay(eventStartDayTs != null ? eventStartDayTs.toInstant().atZone(ZoneId.systemDefault()) : null) + .eventEndDay(eventEndDayTs != null ? eventEndDayTs.toInstant().atZone(ZoneId.systemDefault()) : null) + .embrkTryYn(rs.getString("embrk_try_yn")) + .cargoCapacityStatusCd(rs.getString("cargo_capacity_status_cd")) + .acdntActn(rs.getString("acdnt_actn")) + .acdntZone(rs.getString("acdnt_zone")) + .acdntZoneCd(rs.getString("acdnt_zone_cd")) + .cfgCmpntTwo(rs.getString("cfg_cmpnt_two")) + .countryCd(rs.getString("country_cd")) + .buildYmd(rs.getString("build_ymd")) + .desc(rs.getString("desc")) + .envPosition(rs.getString("env_position")) + .positionNm(rs.getString("position_nm")) + .masdGridRef(rs.getObject("masd_grid_ref") != null ? rs.getLong("masd_grid_ref") : null) + .ctyNm(rs.getString("cty_nm")) + .eventType(rs.getString("event_type")) + .eventTypeDtl(rs.getString("event_type_dtl")) + .eventTypeDtlId(rs.getObject("event_type_dtl_id") != null ? rs.getLong("event_type_dtl_id") : null) + .eventTypeId(rs.getObject("event_type_id") != null ? rs.getLong("event_type_id") : null) + .fireduponYn(rs.getString("firedupon_yn")) + .title(rs.getString("title")) + .ldtTimpt(rs.getObject("ldt_timpt") != null ? rs.getLong("ldt_timpt") : null) + .signfct(rs.getString("signfct")) + .wethr(rs.getString("wethr")) + .pltnMatral(rs.getString("pltn_matral")) + .pltnMatralCnt(rs.getObject("pltn_matral_cnt") != null ? rs.getLong("pltn_matral_cnt") : null) + .pltnMatralUnit(rs.getString("pltn_matral_unit")) + .regShponrCdHr(rs.getString("reg_shponr_cd_hr")) + .regShponrHr(rs.getString("reg_shponr_hr")) + .regShponrCountryCdHr(rs.getString("reg_shponr_country_cd_hr")) + .regShponrCountryHr(rs.getString("reg_shponr_country_hr")) + .shipDwt(rs.getObject("ship_dwt") != null ? rs.getLong("ship_dwt") : null) + .shipFlgCd(rs.getString("ship_flg_cd")) + .shipFlgDecd(rs.getString("ship_flg_decd")) + .shipGt(rs.getObject("ship_gt") != null ? rs.getLong("ship_gt") : null) + .shipNm(rs.getString("ship_nm")) + .shipType(rs.getString("ship_type")) + .shipTypeNm(rs.getString("ship_type_nm")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventRelationshipReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventRelationshipReader.java index 9fdd2eb..572f758 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventRelationshipReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/event/reader/EventRelationshipReader.java @@ -1,70 +1,38 @@ package com.snp.batch.jobs.datasync.batch.event.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.event.dto.EventRelationshipDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class EventRelationshipReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class EventRelationshipReader extends BaseSyncReader { public EventRelationshipReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public EventRelationshipDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceEventRelationship; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceEventRelationship), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[EventRelationshipReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceEventRelationship); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return EventRelationshipDto.builder() - .jobExecutionId(targetId) - .acdntId(rs.getString("acdnt_id")) - .eventId(rs.getObject("event_id") != null ? rs.getLong("event_id") : null) - .eventIdTwo(rs.getObject("event_id_two") != null ? rs.getLong("event_id_two") : null) - .eventTypeCd(rs.getString("event_type_cd")) - .eventType(rs.getString("event_type")) - .relTypeCd(rs.getString("rel_type_cd")) - .relType(rs.getString("rel_type")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceEventRelationship); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected EventRelationshipDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return EventRelationshipDto.builder() + .jobExecutionId(targetId) + .acdntId(rs.getString("acdnt_id")) + .eventId(rs.getObject("event_id") != null ? rs.getLong("event_id") : null) + .eventIdTwo(rs.getObject("event_id_two") != null ? rs.getLong("event_id_two") : null) + .eventTypeCd(rs.getString("event_type_cd")) + .eventType(rs.getString("event_type")) + .relTypeCd(rs.getString("rel_type_cd")) + .relType(rs.getString("rel_type")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/facility/config/FacilitySyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/facility/config/FacilitySyncJobConfig.java index 74c4265..3dcd29a 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/facility/config/FacilitySyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/facility/config/FacilitySyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.facility.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.facility.dto.FacilityPortDto; import com.snp.batch.jobs.datasync.batch.facility.entity.FacilityPortEntity; @@ -112,12 +109,10 @@ public class FacilitySyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(facilityPortWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/facility/reader/FacilityPortReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/facility/reader/FacilityPortReader.java index 67aa60d..73844e8 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/facility/reader/FacilityPortReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/facility/reader/FacilityPortReader.java @@ -1,117 +1,86 @@ package com.snp.batch.jobs.datasync.batch.facility.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.facility.dto.FacilityPortDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; +import java.time.ZoneId; @Slf4j -public class FacilityPortReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class FacilityPortReader extends BaseSyncReader { public FacilityPortReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public FacilityPortDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceFacilityPort; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceFacilityPort), Long.class); - } catch (Exception e) { - return; - } + @Override + protected FacilityPortDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); + Timestamp regYmdTs = rs.getTimestamp("reg_ymd"); - if (nextTargetId != null) { - log.info("[FacilityPortReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceFacilityPort); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - Timestamp regYmdTs = rs.getTimestamp("reg_ymd"); - - return FacilityPortDto.builder() - .jobExecutionId(targetId) - .portId(rs.getObject("port_id") != null ? rs.getLong("port_id") : null) - .bfrId(rs.getString("bfr_id")) - .status(rs.getString("status")) - .portNm(rs.getString("port_nm")) - .unPortCd(rs.getString("un_port_cd")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .areanm(rs.getString("areanm")) - .cntntnm(rs.getString("cntntnm")) - .mstPortId(rs.getString("mst_port_id")) - .latDecml(rs.getObject("lat_decml") != null ? rs.getDouble("lat_decml") : null) - .lonDecml(rs.getObject("lon_decml") != null ? rs.getDouble("lon_decml") : null) - .positionLat(rs.getObject("position_lat") != null ? rs.getDouble("position_lat") : null) - .positionLon(rs.getObject("position_lon") != null ? rs.getDouble("position_lon") : null) - .positionZVal(rs.getObject("position_z_val") != null ? rs.getDouble("position_z_val") : null) - .positionMvalVal(rs.getObject("position_mval_val") != null ? rs.getDouble("position_mval_val") : null) - .zValHasYn(rs.getObject("z_val_has_yn") != null ? rs.getBoolean("z_val_has_yn") : null) - .mvalValHasYn(rs.getObject("mval_val_has_yn") != null ? rs.getBoolean("mval_val_has_yn") : null) - .positionNulYn(rs.getObject("position_nul_yn") != null ? rs.getBoolean("position_nul_yn") : null) - .positionStsId(rs.getObject("position_sts_id") != null ? rs.getLong("position_sts_id") : null) - .hrZone(rs.getString("hr_zone")) - .daylgtSaveHr(rs.getObject("daylgt_save_hr") != null ? rs.getBoolean("daylgt_save_hr") : null) - .maxDraft(rs.getObject("max_draft") != null ? rs.getDouble("max_draft") : null) - .maxWhlnth(rs.getObject("max_whlnth") != null ? rs.getDouble("max_whlnth") : null) - .maxBeam(rs.getObject("max_beam") != null ? rs.getDouble("max_beam") : null) - .maxDwt(rs.getObject("max_dwt") != null ? rs.getDouble("max_dwt") : null) - .maxSeaDraft(rs.getObject("max_sea_draft") != null ? rs.getDouble("max_sea_draft") : null) - .maxSeaWhlnth(rs.getObject("max_sea_whlnth") != null ? rs.getDouble("max_sea_whlnth") : null) - .maxSeaBcm(rs.getObject("max_sea_bcm") != null ? rs.getDouble("max_sea_bcm") : null) - .maxSeaDwt(rs.getObject("max_sea_dwt") != null ? rs.getDouble("max_sea_dwt") : null) - .baleCargoFacility(rs.getObject("bale_cargo_facility") != null ? rs.getBoolean("bale_cargo_facility") : null) - .cntnrFacility(rs.getObject("cntnr_facility") != null ? rs.getBoolean("cntnr_facility") : null) - .caseCargoFacility(rs.getObject("case_cargo_facility") != null ? rs.getBoolean("case_cargo_facility") : null) - .liquidCargoFacility(rs.getObject("liquid_cargo_facility") != null ? rs.getBoolean("liquid_cargo_facility") : null) - .roroFacility(rs.getObject("roro_facility") != null ? rs.getBoolean("roro_facility") : null) - .paxfclty(rs.getObject("paxfclty") != null ? rs.getBoolean("paxfclty") : null) - .drydkfclty(rs.getObject("drydkfclty") != null ? rs.getBoolean("drydkfclty") : null) - .lpgFacility(rs.getObject("lpg_facility") != null ? rs.getLong("lpg_facility") : null) - .lngFacility(rs.getObject("lng_facility") != null ? rs.getLong("lng_facility") : null) - .lngBnkr(rs.getObject("lng_bnkr") != null ? rs.getBoolean("lng_bnkr") : null) - .doBnkr(rs.getObject("do_bnkr") != null ? rs.getBoolean("do_bnkr") : null) - .foBnkr(rs.getObject("fo_bnkr") != null ? rs.getBoolean("fo_bnkr") : null) - .ispsComplianceYn(rs.getObject("isps_compliance_yn") != null ? rs.getBoolean("isps_compliance_yn") : null) - .csiComplianceYn(rs.getObject("csi_compliance_yn") != null ? rs.getBoolean("csi_compliance_yn") : null) - .freeTrdZone(rs.getObject("free_trd_zone") != null ? rs.getBoolean("free_trd_zone") : null) - .ecfrdPort(rs.getObject("ecfrd_port") != null ? rs.getBoolean("ecfrd_port") : null) - .emsnCtrlArea(rs.getObject("emsn_ctrl_area") != null ? rs.getBoolean("emsn_ctrl_area") : null) - .wsPort(rs.getObject("ws_port") != null ? rs.getLong("ws_port") : null) - .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toInstant().atZone(java.time.ZoneId.systemDefault()) : null) - .regYmd(regYmdTs != null ? regYmdTs.toInstant().atZone(java.time.ZoneId.systemDefault()) : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceFacilityPort); - businessJdbcTemplate.update(sql, targetExecutionId); + return FacilityPortDto.builder() + .jobExecutionId(targetId) + .portId(rs.getObject("port_id") != null ? rs.getLong("port_id") : null) + .bfrId(rs.getString("bfr_id")) + .status(rs.getString("status")) + .portNm(rs.getString("port_nm")) + .unPortCd(rs.getString("un_port_cd")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .areanm(rs.getString("areanm")) + .cntntnm(rs.getString("cntntnm")) + .mstPortId(rs.getString("mst_port_id")) + .latDecml(rs.getObject("lat_decml") != null ? rs.getDouble("lat_decml") : null) + .lonDecml(rs.getObject("lon_decml") != null ? rs.getDouble("lon_decml") : null) + .positionLat(rs.getObject("position_lat") != null ? rs.getDouble("position_lat") : null) + .positionLon(rs.getObject("position_lon") != null ? rs.getDouble("position_lon") : null) + .positionZVal(rs.getObject("position_z_val") != null ? rs.getDouble("position_z_val") : null) + .positionMvalVal(rs.getObject("position_mval_val") != null ? rs.getDouble("position_mval_val") : null) + .zValHasYn(rs.getObject("z_val_has_yn") != null ? rs.getBoolean("z_val_has_yn") : null) + .mvalValHasYn(rs.getObject("mval_val_has_yn") != null ? rs.getBoolean("mval_val_has_yn") : null) + .positionNulYn(rs.getObject("position_nul_yn") != null ? rs.getBoolean("position_nul_yn") : null) + .positionStsId(rs.getObject("position_sts_id") != null ? rs.getLong("position_sts_id") : null) + .hrZone(rs.getString("hr_zone")) + .daylgtSaveHr(rs.getObject("daylgt_save_hr") != null ? rs.getBoolean("daylgt_save_hr") : null) + .maxDraft(rs.getObject("max_draft") != null ? rs.getDouble("max_draft") : null) + .maxWhlnth(rs.getObject("max_whlnth") != null ? rs.getDouble("max_whlnth") : null) + .maxBeam(rs.getObject("max_beam") != null ? rs.getDouble("max_beam") : null) + .maxDwt(rs.getObject("max_dwt") != null ? rs.getDouble("max_dwt") : null) + .maxSeaDraft(rs.getObject("max_sea_draft") != null ? rs.getDouble("max_sea_draft") : null) + .maxSeaWhlnth(rs.getObject("max_sea_whlnth") != null ? rs.getDouble("max_sea_whlnth") : null) + .maxSeaBcm(rs.getObject("max_sea_bcm") != null ? rs.getDouble("max_sea_bcm") : null) + .maxSeaDwt(rs.getObject("max_sea_dwt") != null ? rs.getDouble("max_sea_dwt") : null) + .baleCargoFacility(rs.getObject("bale_cargo_facility") != null ? rs.getBoolean("bale_cargo_facility") : null) + .cntnrFacility(rs.getObject("cntnr_facility") != null ? rs.getBoolean("cntnr_facility") : null) + .caseCargoFacility(rs.getObject("case_cargo_facility") != null ? rs.getBoolean("case_cargo_facility") : null) + .liquidCargoFacility(rs.getObject("liquid_cargo_facility") != null ? rs.getBoolean("liquid_cargo_facility") : null) + .roroFacility(rs.getObject("roro_facility") != null ? rs.getBoolean("roro_facility") : null) + .paxfclty(rs.getObject("paxfclty") != null ? rs.getBoolean("paxfclty") : null) + .drydkfclty(rs.getObject("drydkfclty") != null ? rs.getBoolean("drydkfclty") : null) + .lpgFacility(rs.getObject("lpg_facility") != null ? rs.getLong("lpg_facility") : null) + .lngFacility(rs.getObject("lng_facility") != null ? rs.getLong("lng_facility") : null) + .lngBnkr(rs.getObject("lng_bnkr") != null ? rs.getBoolean("lng_bnkr") : null) + .doBnkr(rs.getObject("do_bnkr") != null ? rs.getBoolean("do_bnkr") : null) + .foBnkr(rs.getObject("fo_bnkr") != null ? rs.getBoolean("fo_bnkr") : null) + .ispsComplianceYn(rs.getObject("isps_compliance_yn") != null ? rs.getBoolean("isps_compliance_yn") : null) + .csiComplianceYn(rs.getObject("csi_compliance_yn") != null ? rs.getBoolean("csi_compliance_yn") : null) + .freeTrdZone(rs.getObject("free_trd_zone") != null ? rs.getBoolean("free_trd_zone") : null) + .ecfrdPort(rs.getObject("ecfrd_port") != null ? rs.getBoolean("ecfrd_port") : null) + .emsnCtrlArea(rs.getObject("emsn_ctrl_area") != null ? rs.getBoolean("emsn_ctrl_area") : null) + .wsPort(rs.getObject("ws_port") != null ? rs.getLong("ws_port") : null) + .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toInstant().atZone(ZoneId.systemDefault()) : null) + .regYmd(regYmdTs != null ? regYmdTs.toInstant().atZone(ZoneId.systemDefault()) : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/AnchorageCallSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/AnchorageCallSyncJobConfig.java index eede226..e59f5f4 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/AnchorageCallSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/AnchorageCallSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.AnchorageCallDto; import com.snp.batch.jobs.datasync.batch.movement.entity.AnchorageCallEntity; @@ -103,12 +100,10 @@ public class AnchorageCallSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(anchorageCallWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/BerthCallSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/BerthCallSyncJobConfig.java index c7bc8a1..2ce0451 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/BerthCallSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/BerthCallSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.BerthCallDto; import com.snp.batch.jobs.datasync.batch.movement.entity.BerthCallEntity; @@ -103,12 +100,10 @@ public class BerthCallSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(berthCallWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/CurrentlyAtSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/CurrentlyAtSyncJobConfig.java index 42562d4..603f9b7 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/CurrentlyAtSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/CurrentlyAtSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.CurrentlyAtDto; import com.snp.batch.jobs.datasync.batch.movement.entity.CurrentlyAtEntity; @@ -103,12 +100,10 @@ public class CurrentlyAtSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(currentlyAtWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/DestinationSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/DestinationSyncJobConfig.java index 43f42fc..0c0b607 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/DestinationSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/DestinationSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.DestinationDto; import com.snp.batch.jobs.datasync.batch.movement.entity.DestinationEntity; @@ -103,12 +100,10 @@ public class DestinationSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(destinationWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/PortCallSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/PortCallSyncJobConfig.java index 4b50c19..e922e76 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/PortCallSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/PortCallSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.PortCallDto; import com.snp.batch.jobs.datasync.batch.movement.entity.PortCallEntity; @@ -103,12 +100,10 @@ public class PortCallSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(portCallWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/StsOperationSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/StsOperationSyncJobConfig.java index aa81346..15d87ce 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/StsOperationSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/StsOperationSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.StsOperationDto; import com.snp.batch.jobs.datasync.batch.movement.entity.StsOperationEntity; @@ -103,12 +100,10 @@ public class StsOperationSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(stsOperationWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TerminalCallSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TerminalCallSyncJobConfig.java index 6cc2a03..d4ea182 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TerminalCallSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TerminalCallSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.TerminalCallDto; import com.snp.batch.jobs.datasync.batch.movement.entity.TerminalCallEntity; @@ -103,12 +100,10 @@ public class TerminalCallSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(terminalCallWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TransitSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TransitSyncJobConfig.java index 8753268..b2b8398 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TransitSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/config/TransitSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.movement.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.TransitDto; import com.snp.batch.jobs.datasync.batch.movement.entity.TransitEntity; @@ -103,12 +100,10 @@ public class TransitSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(transitWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/AnchorageCallReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/AnchorageCallReader.java index 0990776..1e4f7c5 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/AnchorageCallReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/AnchorageCallReader.java @@ -1,85 +1,52 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.AnchorageCallDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class AnchorageCallReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class AnchorageCallReader extends BaseSyncReader { public AnchorageCallReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public AnchorageCallDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTAnchorageCall; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTAnchorageCall), Long.class); - } catch (Exception e) { - return; - } + @Override + protected AnchorageCallDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - if (nextTargetId != null) { - log.info("[AnchorageCallReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTAnchorageCall); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - - return AnchorageCallDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) - .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) - .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .positionInfo(rs.getString("position_info")) - .dest(rs.getString("dest")) - .isoTwoCountryCd(rs.getString("iso_two_country_cd")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTAnchorageCall); - businessJdbcTemplate.update(sql, targetExecutionId); + return AnchorageCallDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) + .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) + .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .positionInfo(rs.getString("position_info")) + .dest(rs.getString("dest")) + .isoTwoCountryCd(rs.getString("iso_two_country_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/BerthCallReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/BerthCallReader.java index 2d79011..1e09045 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/BerthCallReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/BerthCallReader.java @@ -1,85 +1,53 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.BerthCallDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class BerthCallReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class BerthCallReader extends BaseSyncReader { public BerthCallReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public BerthCallDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTBerthCall; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTBerthCall), Long.class); - } catch (Exception e) { - return; - } + @Override + protected BerthCallDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); + Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - if (nextTargetId != null) { - log.info("[BerthCallReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTBerthCall); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - - return BerthCallDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) - .upFacilityNm(rs.getString("up_facility_nm")) - .upFacilityType(rs.getString("up_facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .positionInfo(rs.getString("position_info")) - .upClotId(rs.getObject("up_clot_id") != null ? rs.getLong("up_clot_id") : null) - .isoTwoCountryCd(rs.getString("iso_two_country_cd")) - .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTBerthCall); - businessJdbcTemplate.update(sql, targetExecutionId); + return BerthCallDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) + .upFacilityNm(rs.getString("up_facility_nm")) + .upFacilityType(rs.getString("up_facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .positionInfo(rs.getString("position_info")) + .upClotId(rs.getObject("up_clot_id") != null ? rs.getLong("up_clot_id") : null) + .isoTwoCountryCd(rs.getString("iso_two_country_cd")) + .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/CurrentlyAtReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/CurrentlyAtReader.java index b62784e..e6dcb67 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/CurrentlyAtReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/CurrentlyAtReader.java @@ -1,87 +1,55 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.CurrentlyAtDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class CurrentlyAtReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class CurrentlyAtReader extends BaseSyncReader { public CurrentlyAtReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public CurrentlyAtDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTCurrentlyAt; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTCurrentlyAt), Long.class); - } catch (Exception e) { - return; - } + @Override + protected CurrentlyAtDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - if (nextTargetId != null) { - log.info("[CurrentlyAtReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTCurrentlyAt); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - - return CurrentlyAtDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) - .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) - .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) - .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) - .upFacilityNm(rs.getString("up_facility_nm")) - .upFacilityType(rs.getString("up_facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .dest(rs.getString("dest")) - .countryIsoTwoCd(rs.getString("country_iso_two_cd")) - .positionInfo(rs.getString("position_info")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTCurrentlyAt); - businessJdbcTemplate.update(sql, targetExecutionId); + return CurrentlyAtDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) + .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) + .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) + .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) + .upFacilityNm(rs.getString("up_facility_nm")) + .upFacilityType(rs.getString("up_facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .dest(rs.getString("dest")) + .countryIsoTwoCd(rs.getString("country_iso_two_cd")) + .positionInfo(rs.getString("position_info")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/DestinationReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/DestinationReader.java index 6064409..3f97c08 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/DestinationReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/DestinationReader.java @@ -1,78 +1,46 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.DestinationDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class DestinationReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class DestinationReader extends BaseSyncReader { public DestinationReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public DestinationDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTDestination; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTDestination), Long.class); - } catch (Exception e) { - return; - } + @Override + protected DestinationDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - if (nextTargetId != null) { - log.info("[DestinationReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTDestination); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - - return DestinationDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .positionInfo(rs.getString("position_info")) - .countryIsoTwoCd(rs.getString("country_iso_two_cd")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTDestination); - businessJdbcTemplate.update(sql, targetExecutionId); + return DestinationDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .positionInfo(rs.getString("position_info")) + .countryIsoTwoCd(rs.getString("country_iso_two_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/PortCallReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/PortCallReader.java index 910159f..50b2e19 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/PortCallReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/PortCallReader.java @@ -1,87 +1,55 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.PortCallDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class PortCallReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class PortCallReader extends BaseSyncReader { public PortCallReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public PortCallDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTShipStpovInfo; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTShipStpovInfo), Long.class); - } catch (Exception e) { - return; - } + @Override + protected PortCallDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - if (nextTargetId != null) { - log.info("[PortCallReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTShipStpovInfo); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - - return PortCallDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) - .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) - .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) - .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) - .upFacilityNm(rs.getString("up_facility_nm")) - .upFacilityType(rs.getString("up_facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .dest(rs.getString("dest")) - .countryIsoTwoCd(rs.getString("country_iso_two_cd")) - .positionInfo(rs.getString("position_info")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTShipStpovInfo); - businessJdbcTemplate.update(sql, targetExecutionId); + return PortCallDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .prtcllId(rs.getObject("prtcll_id") != null ? rs.getInt("prtcll_id") : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) + .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) + .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) + .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) + .upFacilityNm(rs.getString("up_facility_nm")) + .upFacilityType(rs.getString("up_facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .dest(rs.getString("dest")) + .countryIsoTwoCd(rs.getString("country_iso_two_cd")) + .positionInfo(rs.getString("position_info")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/StsOperationReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/StsOperationReader.java index 580f78c..69cf8d5 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/StsOperationReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/StsOperationReader.java @@ -1,86 +1,54 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.StsOperationDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class StsOperationReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class StsOperationReader extends BaseSyncReader { public StsOperationReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public StsOperationDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTStsOperation; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTStsOperation), Long.class); - } catch (Exception e) { - return; - } + @Override + protected StsOperationDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); + Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - if (nextTargetId != null) { - log.info("[StsOperationReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTStsOperation); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - - return StsOperationDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) - .upFacilityNm(rs.getString("up_facility_nm")) - .upFacilityType(rs.getString("up_facility_type")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .positionInfo(rs.getString("position_info")) - .upPrtcllId(rs.getObject("up_prtcll_id") != null ? rs.getLong("up_prtcll_id") : null) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .stsPosition(rs.getString("sts_position")) - .stsType(rs.getString("sts_type")) - .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTStsOperation); - businessJdbcTemplate.update(sql, targetExecutionId); + return StsOperationDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) + .upFacilityNm(rs.getString("up_facility_nm")) + .upFacilityType(rs.getString("up_facility_type")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .positionInfo(rs.getString("position_info")) + .upPrtcllId(rs.getObject("up_prtcll_id") != null ? rs.getLong("up_prtcll_id") : null) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .stsPosition(rs.getString("sts_position")) + .stsType(rs.getString("sts_type")) + .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TerminalCallReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TerminalCallReader.java index a5a9f52..b4d12ad 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TerminalCallReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TerminalCallReader.java @@ -1,88 +1,56 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.TerminalCallDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class TerminalCallReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class TerminalCallReader extends BaseSyncReader { public TerminalCallReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public TerminalCallDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTTerminalCall; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTTerminalCall), Long.class); - } catch (Exception e) { - return; - } + @Override + protected TerminalCallDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); + Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - if (nextTargetId != null) { - log.info("[TerminalCallReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTTerminalCall); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - Timestamp eventStaDtTs = rs.getTimestamp("event_sta_dt"); - - return TerminalCallDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) - .upFacilityNm(rs.getString("up_facility_nm")) - .upFacilityType(rs.getString("up_facility_type")) - .countryCd(rs.getString("country_cd")) - .countryNm(rs.getString("country_nm")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) - .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) - .positionInfo(rs.getString("position_info")) - .upPrtcllId(rs.getObject("up_prtcll_id") != null ? rs.getLong("up_prtcll_id") : null) - .countryIsoTwoCd(rs.getString("country_iso_two_cd")) - .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) - .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) - .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) - .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTTerminalCall); - businessJdbcTemplate.update(sql, targetExecutionId); + return TerminalCallDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .facilityId(rs.getObject("facility_id") != null ? rs.getInt("facility_id") : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .upFacilityId(rs.getObject("up_facility_id") != null ? rs.getInt("up_facility_id") : null) + .upFacilityNm(rs.getString("up_facility_nm")) + .upFacilityType(rs.getString("up_facility_type")) + .countryCd(rs.getString("country_cd")) + .countryNm(rs.getString("country_nm")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .lat(rs.getObject("lat") != null ? rs.getBigDecimal("lat") : null) + .lon(rs.getObject("lon") != null ? rs.getBigDecimal("lon") : null) + .positionInfo(rs.getString("position_info")) + .upPrtcllId(rs.getObject("up_prtcll_id") != null ? rs.getLong("up_prtcll_id") : null) + .countryIsoTwoCd(rs.getString("country_iso_two_cd")) + .eventStaDt(eventStaDtTs != null ? eventStaDtTs.toLocalDateTime() : null) + .lwrnkFacilityId(rs.getObject("lwrnk_facility_id") != null ? rs.getInt("lwrnk_facility_id") : null) + .lwrnkFacilityDesc(rs.getString("lwrnk_facility_desc")) + .lwrnkFacilityType(rs.getString("lwrnk_facility_type")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TransitReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TransitReader.java index bbe235d..77b2c65 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TransitReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/movement/reader/TransitReader.java @@ -1,72 +1,40 @@ package com.snp.batch.jobs.datasync.batch.movement.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.movement.dto.TransitDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class TransitReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class TransitReader extends BaseSyncReader { public TransitReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public TransitDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTTransit; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTTransit), Long.class); - } catch (Exception e) { - return; - } + @Override + protected TransitDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - if (nextTargetId != null) { - log.info("[TransitReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTTransit); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp mvmnDtTs = rs.getTimestamp("mvmn_dt"); - - return TransitDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .mvmnType(rs.getString("mvmn_type")) - .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) - .facilityNm(rs.getString("facility_nm")) - .facilityType(rs.getString("facility_type")) - .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTTransit); - businessJdbcTemplate.update(sql, targetExecutionId); + return TransitDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .mvmnType(rs.getString("mvmn_type")) + .mvmnDt(mvmnDtTs != null ? mvmnDtTs.toLocalDateTime() : null) + .facilityNm(rs.getString("facility_nm")) + .facilityType(rs.getString("facility_type")) + .draft(rs.getObject("draft") != null ? rs.getBigDecimal("draft") : null) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/config/PscSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/config/PscSyncJobConfig.java index b8b7a5e..7c1c65a 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/config/PscSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/config/PscSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.psc.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.psc.dto.PscAllCertificateDto; import com.snp.batch.jobs.datasync.batch.psc.dto.PscDefectDto; @@ -154,12 +151,10 @@ public class PscSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(pscDetailWriteListener()) .build(); } @@ -168,12 +163,10 @@ public class PscSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(pscDefectReader(businessDataSource, tableMetaInfo)) .processor(new PscDefectProcessor()) .writer(new PscDefectWriter(pscRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(pscDefectWriteListener()) .build(); } @@ -182,12 +175,10 @@ public class PscSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(pscAllCertificateReader(businessDataSource, tableMetaInfo)) .processor(new PscAllCertificateProcessor()) .writer(new PscAllCertificateWriter(pscRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(pscAllCertificateWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscAllCertificateReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscAllCertificateReader.java index 568e9df..ac86608 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscAllCertificateReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscAllCertificateReader.java @@ -1,87 +1,55 @@ package com.snp.batch.jobs.datasync.batch.psc.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.psc.dto.PscAllCertificateDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class PscAllCertificateReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class PscAllCertificateReader extends BaseSyncReader { public PscAllCertificateReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public PscAllCertificateDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourcePscAllCertificate; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourcePscAllCertificate), Long.class); - } catch (Exception e) { - return; - } + @Override + protected PscAllCertificateDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp expryYmdTs = rs.getTimestamp("expry_ymd"); + Timestamp lastInspectionYmdTs = rs.getTimestamp("last_inspection_ymd"); - if (nextTargetId != null) { - log.info("[PscAllCertificateReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourcePscAllCertificate); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp expryYmdTs = rs.getTimestamp("expry_ymd"); - Timestamp lastInspectionYmdTs = rs.getTimestamp("last_inspection_ymd"); - - return PscAllCertificateDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .certId(rs.getString("cert_id")) - .inspectionId(rs.getString("inspection_id")) - .imoNo(rs.getString("imo_no")) - .certfNmCd(rs.getString("certf_nm_cd")) - .certfNm(rs.getString("certf_nm")) - .issueEnginesCd(rs.getString("issue_engines_cd")) - .issueEngines(rs.getString("issue_engines")) - .etcIssueEngines(rs.getString("etc_issue_engines")) - .issueYmd(rs.getString("issue_ymd")) - .expryYmd(expryYmdTs != null ? expryYmdTs.toLocalDateTime() : null) - .lastInspectionYmd(lastInspectionYmdTs != null ? lastInspectionYmdTs.toLocalDateTime() : null) - .inspectionEnginesCd(rs.getString("inspection_engines_cd")) - .inspectionEngines(rs.getString("inspection_engines")) - .etcInspectionEngines(rs.getString("etc_inspection_engines")) - .recentInspectionPlc(rs.getString("recent_inspection_plc")) - .recentInspectionPlcCd(rs.getString("recent_inspection_plc_cd")) - .inspectionEnginesType(rs.getString("inspection_engines_type")) - .checkYmd(rs.getString("check_ymd")) - .insptr(rs.getString("insptr")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourcePscAllCertificate); - businessJdbcTemplate.update(sql, targetExecutionId); + return PscAllCertificateDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .certId(rs.getString("cert_id")) + .inspectionId(rs.getString("inspection_id")) + .imoNo(rs.getString("imo_no")) + .certfNmCd(rs.getString("certf_nm_cd")) + .certfNm(rs.getString("certf_nm")) + .issueEnginesCd(rs.getString("issue_engines_cd")) + .issueEngines(rs.getString("issue_engines")) + .etcIssueEngines(rs.getString("etc_issue_engines")) + .issueYmd(rs.getString("issue_ymd")) + .expryYmd(expryYmdTs != null ? expryYmdTs.toLocalDateTime() : null) + .lastInspectionYmd(lastInspectionYmdTs != null ? lastInspectionYmdTs.toLocalDateTime() : null) + .inspectionEnginesCd(rs.getString("inspection_engines_cd")) + .inspectionEngines(rs.getString("inspection_engines")) + .etcInspectionEngines(rs.getString("etc_inspection_engines")) + .recentInspectionPlc(rs.getString("recent_inspection_plc")) + .recentInspectionPlcCd(rs.getString("recent_inspection_plc_cd")) + .inspectionEnginesType(rs.getString("inspection_engines_type")) + .checkYmd(rs.getString("check_ymd")) + .insptr(rs.getString("insptr")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDefectReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDefectReader.java index f943a3e..82b9e0b 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDefectReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDefectReader.java @@ -1,87 +1,55 @@ package com.snp.batch.jobs.datasync.batch.psc.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.psc.dto.PscDefectDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class PscDefectReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class PscDefectReader extends BaseSyncReader { public PscDefectReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public PscDefectDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourcePscDefect; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourcePscDefect), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[PscDefectReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourcePscDefect); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return PscDefectDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .defectId(rs.getString("defect_id")) - .inspectionId(rs.getString("inspection_id")) - .actnOne(rs.getString("actn_one")) - .actnTwo(rs.getString("actn_two")) - .actnThr(rs.getString("actn_thr")) - .actnCdOne(rs.getString("actn_cd_one")) - .actnCdTwo(rs.getString("actn_cd_two")) - .actnCdThr(rs.getString("actn_cd_thr")) - .clficRespsbYn(rs.getString("clfic_respsb_yn")) - .defectCd(rs.getString("defect_cd")) - .defectCn(rs.getString("defect_cn")) - .defectIemCd(rs.getString("defect_iem_cd")) - .detainedReasonDefect(rs.getString("detained_reason_defect")) - .mainDefectCd(rs.getString("main_defect_cd")) - .mainDefectCn(rs.getString("main_defect_cn")) - .defectTypeCd(rs.getString("defect_type_cd")) - .defectTypeNm(rs.getString("defect_type_nm")) - .etcActn(rs.getString("etc_actn")) - .etcPubcEnginesRespsb(rs.getString("etc_pubc_engines_respsb")) - .pubcEnginesRespsb(rs.getString("pubc_engines_respsb")) - .pubcEnginesRespsbCd(rs.getString("pubc_engines_respsb_cd")) - .pubcEnginesRespsbYn(rs.getString("pubc_engines_respsb_yn")) - .acdntDamgYn(rs.getString("acdnt_damg_yn")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourcePscDefect); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected PscDefectDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return PscDefectDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .defectId(rs.getString("defect_id")) + .inspectionId(rs.getString("inspection_id")) + .actnOne(rs.getString("actn_one")) + .actnTwo(rs.getString("actn_two")) + .actnThr(rs.getString("actn_thr")) + .actnCdOne(rs.getString("actn_cd_one")) + .actnCdTwo(rs.getString("actn_cd_two")) + .actnCdThr(rs.getString("actn_cd_thr")) + .clficRespsbYn(rs.getString("clfic_respsb_yn")) + .defectCd(rs.getString("defect_cd")) + .defectCn(rs.getString("defect_cn")) + .defectIemCd(rs.getString("defect_iem_cd")) + .detainedReasonDefect(rs.getString("detained_reason_defect")) + .mainDefectCd(rs.getString("main_defect_cd")) + .mainDefectCn(rs.getString("main_defect_cn")) + .defectTypeCd(rs.getString("defect_type_cd")) + .defectTypeNm(rs.getString("defect_type_nm")) + .etcActn(rs.getString("etc_actn")) + .etcPubcEnginesRespsb(rs.getString("etc_pubc_engines_respsb")) + .pubcEnginesRespsb(rs.getString("pubc_engines_respsb")) + .pubcEnginesRespsbCd(rs.getString("pubc_engines_respsb_cd")) + .pubcEnginesRespsbYn(rs.getString("pubc_engines_respsb_yn")) + .acdntDamgYn(rs.getString("acdnt_damg_yn")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDetailReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDetailReader.java index f7d9e3d..b27c926 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDetailReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/psc/reader/PscDetailReader.java @@ -1,98 +1,66 @@ package com.snp.batch.jobs.datasync.batch.psc.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.psc.dto.PscDetailDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class PscDetailReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class PscDetailReader extends BaseSyncReader { public PscDetailReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public PscDetailDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourcePscDetail; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourcePscDetail), Long.class); - } catch (Exception e) { - return; - } + @Override + protected PscDetailDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp inspectionYmdTs = rs.getTimestamp("inspection_ymd"); + Timestamp tkoffPrmtYmdTs = rs.getTimestamp("tkoff_prmt_ymd"); + Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - if (nextTargetId != null) { - log.info("[PscDetailReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourcePscDetail); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp inspectionYmdTs = rs.getTimestamp("inspection_ymd"); - Timestamp tkoffPrmtYmdTs = rs.getTimestamp("tkoff_prmt_ymd"); - Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - - return PscDetailDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .inspectionId(rs.getString("inspection_id")) - .typeId(rs.getString("type_id")) - .clsgnNo(rs.getString("clsgn_no")) - .chrter(rs.getString("chrter")) - .clfic(rs.getString("clfic")) - .country(rs.getString("country")) - .inspectionYmd(inspectionYmdTs != null ? inspectionYmdTs.toLocalDateTime() : null) - .tkoffPrmtYmd(tkoffPrmtYmdTs != null ? tkoffPrmtYmdTs.toLocalDateTime() : null) - .shipDetainedYn(rs.getString("ship_detained_yn")) - .dwt(rs.getString("dwt")) - .expndInspectionYn(rs.getString("expnd_inspection_yn")) - .flg(rs.getString("flg")) - .folwInspectionYn(rs.getString("folw_inspection_yn")) - .gt(rs.getString("gt")) - .inspectionPortNm(rs.getString("inspection_port_nm")) - .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) - .shipMngr(rs.getString("ship_mngr")) - .detainedDays(rs.getObject("detained_days") != null ? rs.getInt("detained_days") : null) - .defectCnt(rs.getString("defect_cnt")) - .defectCntDays(rs.getBigDecimal("defect_cnt_days")) - .etcInspectionType(rs.getString("etc_inspection_type")) - .shponr(rs.getString("shponr")) - .shipNm(rs.getString("ship_nm")) - .shipTypeCd(rs.getString("ship_type_cd")) - .shipTypeNm(rs.getString("ship_type_nm")) - .dataSrc(rs.getString("data_src")) - .unPortCd(rs.getString("un_port_cd")) - .buildYy(rs.getString("build_yy")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourcePscDetail); - businessJdbcTemplate.update(sql, targetExecutionId); + return PscDetailDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .inspectionId(rs.getString("inspection_id")) + .typeId(rs.getString("type_id")) + .clsgnNo(rs.getString("clsgn_no")) + .chrter(rs.getString("chrter")) + .clfic(rs.getString("clfic")) + .country(rs.getString("country")) + .inspectionYmd(inspectionYmdTs != null ? inspectionYmdTs.toLocalDateTime() : null) + .tkoffPrmtYmd(tkoffPrmtYmdTs != null ? tkoffPrmtYmdTs.toLocalDateTime() : null) + .shipDetainedYn(rs.getString("ship_detained_yn")) + .dwt(rs.getString("dwt")) + .expndInspectionYn(rs.getString("expnd_inspection_yn")) + .flg(rs.getString("flg")) + .folwInspectionYn(rs.getString("folw_inspection_yn")) + .gt(rs.getString("gt")) + .inspectionPortNm(rs.getString("inspection_port_nm")) + .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) + .shipMngr(rs.getString("ship_mngr")) + .detainedDays(rs.getObject("detained_days") != null ? rs.getInt("detained_days") : null) + .defectCnt(rs.getString("defect_cnt")) + .defectCntDays(rs.getBigDecimal("defect_cnt_days")) + .etcInspectionType(rs.getString("etc_inspection_type")) + .shponr(rs.getString("shponr")) + .shipNm(rs.getString("ship_nm")) + .shipTypeCd(rs.getString("ship_type_cd")) + .shipTypeNm(rs.getString("ship_type_nm")) + .dataSrc(rs.getString("data_src")) + .unPortCd(rs.getString("un_port_cd")) + .buildYy(rs.getString("build_yy")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/risk/config/RiskSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/risk/config/RiskSyncJobConfig.java index 90c5d57..8ba3d4c 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/risk/config/RiskSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/risk/config/RiskSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.risk.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.risk.dto.RiskDto; import com.snp.batch.jobs.datasync.batch.risk.entity.RiskEntity; @@ -112,12 +109,10 @@ public class RiskSyncJobConfig extends BaseJobConfig { public Step riskSyncStep() { log.info("Step 생성: riskSyncStep"); return new StepBuilder(getStepName(), jobRepository) - .chunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) - .listener(new GroupByExecutionIdChunkListener()) .listener(riskWriteListener()) .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/risk/reader/RiskReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/risk/reader/RiskReader.java index 724efd0..59ad094 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/risk/reader/RiskReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/risk/reader/RiskReader.java @@ -1,108 +1,76 @@ package com.snp.batch.jobs.datasync.batch.risk.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.risk.dto.RiskDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; @Slf4j -public class RiskReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class RiskReader extends BaseSyncReader { public RiskReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public RiskDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceRisk; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceRisk), Long.class); - } catch (Exception e) { - return; - } + @Override + protected RiskDto mapRow(ResultSet rs, Long targetId) throws SQLException { + Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - if (nextTargetId != null) { - log.info("[RiskReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceRisk); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - Timestamp lastMdfcnDtTs = rs.getTimestamp("last_mdfcn_dt"); - - return RiskDto.builder() - .jobExecutionId(targetId) - .imoNo(rs.getString("imo_no")) - .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) - .riskDataMaint(rs.getString("risk_data_maint")) - .aisNotrcvElpsDays(rs.getString("ais_notrcv_elps_days")) - .aisLwrnkDays(rs.getString("ais_lwrnk_days")) - .aisUpImoDesc(rs.getString("ais_up_imo_desc")) - .othrShipNmVoyYn(rs.getString("othr_ship_nm_voy_yn")) - .mmsiAnomMessage(rs.getString("mmsi_anom_message")) - .recentDarkActv(rs.getString("recent_dark_actv")) - .portPrtcll(rs.getString("port_prtcll")) - .portRisk(rs.getString("port_risk")) - .stsJob(rs.getString("sts_job")) - .driftChg(rs.getString("drift_chg")) - .riskEvent(rs.getString("risk_event")) - .ntnltyChg(rs.getString("ntnlty_chg")) - .ntnltyPrsMouPerf(rs.getString("ntnlty_prs_mou_perf")) - .ntnltyTkyMouPerf(rs.getString("ntnlty_tky_mou_perf")) - .ntnltyUscgMouPerf(rs.getString("ntnlty_uscg_mou_perf")) - .uscgExclShipCert(rs.getString("uscg_excl_ship_cert")) - .pscInspectionElpsHr(rs.getString("psc_inspection_elps_hr")) - .pscInspection(rs.getString("psc_inspection")) - .pscDefect(rs.getString("psc_defect")) - .pscDetained(rs.getString("psc_detained")) - .nowSmgrcEvdc(rs.getString("now_smgrc_evdc")) - .doccChg(rs.getString("docc_chg")) - .nowClfic(rs.getString("now_clfic")) - .clficStatusChg(rs.getString("clfic_status_chg")) - .pniInsrnc(rs.getString("pni_insrnc")) - .shipNmChg(rs.getString("ship_nm_chg")) - .gboChg(rs.getString("gbo_chg")) - .vslage(rs.getString("vslage")) - .ilglFshrViol(rs.getString("ilgl_fshr_viol")) - .draftChg(rs.getString("draft_chg")) - .recentSanctionPrtcll(rs.getString("recent_sanction_prtcll")) - .snglShipVoy(rs.getString("sngl_ship_voy")) - .fltsfty(rs.getString("fltsfty")) - .fltPsc(rs.getString("flt_psc")) - .spcInspectionOvdue(rs.getString("spc_inspection_ovdue")) - .ownrUnk(rs.getString("ownr_unk")) - .rssPortCall(rs.getString("rss_port_call")) - .rssOwnrReg(rs.getString("rss_ownr_reg")) - .rssSts(rs.getString("rss_sts")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceRisk); - businessJdbcTemplate.update(sql, targetExecutionId); + return RiskDto.builder() + .jobExecutionId(targetId) + .imoNo(rs.getString("imo_no")) + .lastMdfcnDt(lastMdfcnDtTs != null ? lastMdfcnDtTs.toLocalDateTime() : null) + .riskDataMaint(rs.getString("risk_data_maint")) + .aisNotrcvElpsDays(rs.getString("ais_notrcv_elps_days")) + .aisLwrnkDays(rs.getString("ais_lwrnk_days")) + .aisUpImoDesc(rs.getString("ais_up_imo_desc")) + .othrShipNmVoyYn(rs.getString("othr_ship_nm_voy_yn")) + .mmsiAnomMessage(rs.getString("mmsi_anom_message")) + .recentDarkActv(rs.getString("recent_dark_actv")) + .portPrtcll(rs.getString("port_prtcll")) + .portRisk(rs.getString("port_risk")) + .stsJob(rs.getString("sts_job")) + .driftChg(rs.getString("drift_chg")) + .riskEvent(rs.getString("risk_event")) + .ntnltyChg(rs.getString("ntnlty_chg")) + .ntnltyPrsMouPerf(rs.getString("ntnlty_prs_mou_perf")) + .ntnltyTkyMouPerf(rs.getString("ntnlty_tky_mou_perf")) + .ntnltyUscgMouPerf(rs.getString("ntnlty_uscg_mou_perf")) + .uscgExclShipCert(rs.getString("uscg_excl_ship_cert")) + .pscInspectionElpsHr(rs.getString("psc_inspection_elps_hr")) + .pscInspection(rs.getString("psc_inspection")) + .pscDefect(rs.getString("psc_defect")) + .pscDetained(rs.getString("psc_detained")) + .nowSmgrcEvdc(rs.getString("now_smgrc_evdc")) + .doccChg(rs.getString("docc_chg")) + .nowClfic(rs.getString("now_clfic")) + .clficStatusChg(rs.getString("clfic_status_chg")) + .pniInsrnc(rs.getString("pni_insrnc")) + .shipNmChg(rs.getString("ship_nm_chg")) + .gboChg(rs.getString("gbo_chg")) + .vslage(rs.getString("vslage")) + .ilglFshrViol(rs.getString("ilgl_fshr_viol")) + .draftChg(rs.getString("draft_chg")) + .recentSanctionPrtcll(rs.getString("recent_sanction_prtcll")) + .snglShipVoy(rs.getString("sngl_ship_voy")) + .fltsfty(rs.getString("fltsfty")) + .fltPsc(rs.getString("flt_psc")) + .spcInspectionOvdue(rs.getString("spc_inspection_ovdue")) + .ownrUnk(rs.getString("ownr_unk")) + .rssPortCall(rs.getString("rss_port_call")) + .rssOwnrReg(rs.getString("rss_ownr_reg")) + .rssSts(rs.getString("rss_sts")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/config/ShipDetailSyncJobConfig.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/config/ShipDetailSyncJobConfig.java index 176f991..3314d57 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/config/ShipDetailSyncJobConfig.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/config/ShipDetailSyncJobConfig.java @@ -3,9 +3,6 @@ package com.snp.batch.jobs.datasync.batch.ship.config; import com.snp.batch.common.batch.config.BaseJobConfig; import com.snp.batch.common.util.BatchWriteListener; import com.snp.batch.common.util.CommonSql; -import com.snp.batch.common.util.GroupByExecutionIdChunkListener; -import com.snp.batch.common.util.GroupByExecutionIdPolicy; -import com.snp.batch.common.util.GroupByExecutionIdReadListener; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.BareboatCharterHistoryDto; import com.snp.batch.jobs.datasync.batch.ship.dto.CallsignAndMmsiHistoryDto; @@ -634,12 +631,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(createReader()) .processor(createProcessor()) .writer(createWriter()) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 (ThreadLocal 설정) - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 (ThreadLocal 정리) .listener(shipWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -648,12 +643,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(ownerHistoryReader(businessDataSource, tableMetaInfo)) .processor(new OwnerHistoryProcessor()) .writer(new OwnerHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(ownerHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -662,12 +655,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(shipAddInfoReader(businessDataSource, tableMetaInfo)) .processor(new ShipAddInfoProcessor()) .writer(new ShipAddInfoWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(shipAddInfoWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -676,12 +667,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(bareboatCharterHistoryReader(businessDataSource, tableMetaInfo)) .processor(new BareboatCharterHistoryProcessor()) .writer(new BareboatCharterHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(bareboatCharterHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -690,12 +679,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(callsignAndMmsiHistoryReader(businessDataSource, tableMetaInfo)) .processor(new CallsignAndMmsiHistoryProcessor()) .writer(new CallsignAndMmsiHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(callsignAndMmsiHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -704,12 +691,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(classHistoryReader(businessDataSource, tableMetaInfo)) .processor(new ClassHistoryProcessor()) .writer(new ClassHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(classHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -718,12 +703,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(companyVesselRelationshipsReader(businessDataSource, tableMetaInfo)) .processor(new CompanyVesselRelationshipsProcessor()) .writer(new CompanyVesselRelationshipsWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(companyVesselRelationshipsWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -732,12 +715,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(crewListReader(businessDataSource, tableMetaInfo)) .processor(new CrewListProcessor()) .writer(new CrewListWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(crewListWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -746,12 +727,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(darkActivityConfirmedReader(businessDataSource, tableMetaInfo)) .processor(new DarkActivityConfirmedProcessor()) .writer(new DarkActivityConfirmedWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(darkActivityConfirmedWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -760,12 +739,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(flagHistoryReader(businessDataSource, tableMetaInfo)) .processor(new FlagHistoryProcessor()) .writer(new FlagHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(flagHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -774,12 +751,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(groupBeneficialOwnerHistoryReader(businessDataSource, tableMetaInfo)) .processor(new GroupBeneficialOwnerHistoryProcessor()) .writer(new GroupBeneficialOwnerHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(groupBeneficialOwnerHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -788,12 +763,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(iceClassReader(businessDataSource, tableMetaInfo)) .processor(new IceClassProcessor()) .writer(new IceClassWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(iceClassWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -802,12 +775,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(nameHistoryReader(businessDataSource, tableMetaInfo)) .processor(new NameHistoryProcessor()) .writer(new NameHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(nameHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -816,12 +787,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(operatorHistoryReader(businessDataSource, tableMetaInfo)) .processor(new OperatorHistoryProcessor()) .writer(new OperatorHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(operatorHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -830,12 +799,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(pandIHistoryReader(businessDataSource, tableMetaInfo)) .processor(new PandIHistoryProcessor()) .writer(new PandIHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(pandIHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -844,12 +811,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(safetyManagementCertificateHistReader(businessDataSource, tableMetaInfo)) .processor(new SafetyManagementCertificateHistProcessor()) .writer(new SafetyManagementCertificateHistWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(safetyManagementCertificateHistWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -858,12 +823,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(shipManagerHistoryReader(businessDataSource, tableMetaInfo)) .processor(new ShipManagerHistoryProcessor()) .writer(new ShipManagerHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(shipManagerHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -872,12 +835,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(sisterShipLinksReader(businessDataSource, tableMetaInfo)) .processor(new SisterShipLinksProcessor()) .writer(new SisterShipLinksWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(sisterShipLinksWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -886,12 +847,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(specialFeatureReader(businessDataSource, tableMetaInfo)) .processor(new SpecialFeatureProcessor()) .writer(new SpecialFeatureWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(specialFeatureWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -900,12 +859,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(statusHistoryReader(businessDataSource, tableMetaInfo)) .processor(new StatusHistoryProcessor()) .writer(new StatusHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(statusHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -914,12 +871,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(stowageCommodityReader(businessDataSource, tableMetaInfo)) .processor(new StowageCommodityProcessor()) .writer(new StowageCommodityWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(stowageCommodityWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -928,12 +883,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(surveyDatesReader(businessDataSource, tableMetaInfo)) .processor(new SurveyDatesProcessor()) .writer(new SurveyDatesWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(surveyDatesWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -942,12 +895,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(surveyDatesHistoryUniqueReader(businessDataSource, tableMetaInfo)) .processor(new SurveyDatesHistoryUniqueProcessor()) .writer(new SurveyDatesHistoryUniqueWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(surveyDatesHistoryUniqueWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -956,12 +907,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(technicalManagerHistoryReader(businessDataSource, tableMetaInfo)) .processor(new TechnicalManagerHistoryProcessor()) .writer(new TechnicalManagerHistoryWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(technicalManagerHistoryWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -970,12 +919,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(thrustersReader(businessDataSource, tableMetaInfo)) .processor(new ThrustersProcessor()) .writer(new ThrustersWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(thrustersWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } @@ -984,12 +931,10 @@ public class ShipDetailSyncJobConfig extends BaseJobConfigchunk(new GroupByExecutionIdPolicy(), transactionManager) + .chunk(getChunkSize(), transactionManager) .reader(tbCompanyDetailReader(businessDataSource, tableMetaInfo)) .processor(new TbCompanyDetailProcessor()) .writer(new TbCompanyDetailWriter(shipRepository, transactionManager, subChunkSize)) - .listener(new GroupByExecutionIdReadListener()) // Reader 리스너 - .listener(new GroupByExecutionIdChunkListener()) // Chunk 리스너 .listener(tbCompanyDetailWriteListener()) // Write 완료 후 batch_flag 업데이트 .build(); } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/BareboatCharterHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/BareboatCharterHistoryReader.java index 3ab79b7..5706882 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/BareboatCharterHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/BareboatCharterHistoryReader.java @@ -1,73 +1,37 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.BareboatCharterHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class BareboatCharterHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class BareboatCharterHistoryReader extends BaseSyncReader { public BareboatCharterHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public BareboatCharterHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceBareboatCharterHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceBareboatCharterHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[BareboatCharterHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceBareboatCharterHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return BareboatCharterHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .bbctrSeq(rs.getString("bbctr_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .bbctrCompanyCd(rs.getString("bbctr_company_cd")) - .bbctrCompany(rs.getString("bbctr_company")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceBareboatCharterHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected BareboatCharterHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return BareboatCharterHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .bbctrSeq(rs.getString("bbctr_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .bbctrCompanyCd(rs.getString("bbctr_company_cd")) + .bbctrCompany(rs.getString("bbctr_company")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CallsignAndMmsiHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CallsignAndMmsiHistoryReader.java index 4d54f93..909773e 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CallsignAndMmsiHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CallsignAndMmsiHistoryReader.java @@ -1,73 +1,37 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.CallsignAndMmsiHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class CallsignAndMmsiHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class CallsignAndMmsiHistoryReader extends BaseSyncReader { public CallsignAndMmsiHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public CallsignAndMmsiHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceCallsignAndMmsiHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceCallsignAndMmsiHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[CallsignAndMmsiHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceCallsignAndMmsiHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return CallsignAndMmsiHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipIdntfSeq(rs.getString("ship_idntf_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .clsgnNo(rs.getString("clsgn_no")) - .mmsiNo(rs.getString("mmsi_no")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceCallsignAndMmsiHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected CallsignAndMmsiHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return CallsignAndMmsiHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipIdntfSeq(rs.getString("ship_idntf_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .clsgnNo(rs.getString("clsgn_no")) + .mmsiNo(rs.getString("mmsi_no")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ClassHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ClassHistoryReader.java index d5ccbf2..4d0eef2 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ClassHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ClassHistoryReader.java @@ -1,76 +1,40 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.ClassHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class ClassHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ClassHistoryReader extends BaseSyncReader { public ClassHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ClassHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceClassHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceClassHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[ClassHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceClassHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return ClassHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .clficHstrySeq(rs.getString("clfic_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .clficCd(rs.getString("clfic_cd")) - .clficId(rs.getString("clfic_id")) - .clficAstnNm(rs.getString("clfic_asctn_nm")) - .clficHasYn(rs.getString("clfic_has_yn")) - .nowYn(rs.getString("now_yn")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceClassHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected ClassHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return ClassHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .clficHstrySeq(rs.getString("clfic_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .clficCd(rs.getString("clfic_cd")) + .clficId(rs.getString("clfic_id")) + .clficAstnNm(rs.getString("clfic_asctn_nm")) + .clficHasYn(rs.getString("clfic_has_yn")) + .nowYn(rs.getString("now_yn")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CompanyVesselRelationshipsReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CompanyVesselRelationshipsReader.java index f313ab8..f3f68f6 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CompanyVesselRelationshipsReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CompanyVesselRelationshipsReader.java @@ -1,89 +1,53 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.CompanyVesselRelationshipsDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class CompanyVesselRelationshipsReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class CompanyVesselRelationshipsReader extends BaseSyncReader { public CompanyVesselRelationshipsReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public CompanyVesselRelationshipsDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceCompanyVesselRelationships; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceCompanyVesselRelationships), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[CompanyVesselRelationshipsReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceCompanyVesselRelationships); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return CompanyVesselRelationshipsDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .doccHasCompanyCd(rs.getString("docc_has_company_cd")) - .doccHasCompany(rs.getString("docc_has_company")) - .groupActlOwnr(rs.getString("group_actl_ownr")) - .groupActlOwnrCd(rs.getString("group_actl_ownr_cd")) - .shipOperator(rs.getString("ship_operator")) - .shipOperatorCd(rs.getString("ship_operator_cd")) - .rgOwnr(rs.getString("rg_ownr")) - .rgOwnrCd(rs.getString("rg_ownr_cd")) - .shipMngCompany(rs.getString("ship_mng_company")) - .shipMngCompanyCd(rs.getString("ship_mng_company_cd")) - .techMngCompany(rs.getString("tech_mng_company")) - .techMngCompanyCd(rs.getString("tech_mng_company_cd")) - .doccGroup(rs.getString("docc_group")) - .doccGroupCd(rs.getString("docc_group_cd")) - .shipOperatorGroup(rs.getString("ship_operator_group")) - .shipOperatorGroupCd(rs.getString("ship_operator_group_cd")) - .shipMngCompanyGroup(rs.getString("ship_mng_company_group")) - .shipMngCompanyGroupCd(rs.getString("ship_mng_company_group_cd")) - .techMngCompanyGroup(rs.getString("tech_mng_company_group")) - .techMngCompanyGroupCd(rs.getString("tech_mng_company_group_cd")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceCompanyVesselRelationships); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected CompanyVesselRelationshipsDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return CompanyVesselRelationshipsDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .doccHasCompanyCd(rs.getString("docc_has_company_cd")) + .doccHasCompany(rs.getString("docc_has_company")) + .groupActlOwnr(rs.getString("group_actl_ownr")) + .groupActlOwnrCd(rs.getString("group_actl_ownr_cd")) + .shipOperator(rs.getString("ship_operator")) + .shipOperatorCd(rs.getString("ship_operator_cd")) + .rgOwnr(rs.getString("rg_ownr")) + .rgOwnrCd(rs.getString("rg_ownr_cd")) + .shipMngCompany(rs.getString("ship_mng_company")) + .shipMngCompanyCd(rs.getString("ship_mng_company_cd")) + .techMngCompany(rs.getString("tech_mng_company")) + .techMngCompanyCd(rs.getString("tech_mng_company_cd")) + .doccGroup(rs.getString("docc_group")) + .doccGroupCd(rs.getString("docc_group_cd")) + .shipOperatorGroup(rs.getString("ship_operator_group")) + .shipOperatorGroupCd(rs.getString("ship_operator_group_cd")) + .shipMngCompanyGroup(rs.getString("ship_mng_company_group")) + .shipMngCompanyGroupCd(rs.getString("ship_mng_company_group_cd")) + .techMngCompanyGroup(rs.getString("tech_mng_company_group")) + .techMngCompanyGroupCd(rs.getString("tech_mng_company_group_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CrewListReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CrewListReader.java index f98da96..202c910 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CrewListReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/CrewListReader.java @@ -1,80 +1,44 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.CrewListDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class CrewListReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class CrewListReader extends BaseSyncReader { public CrewListReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public CrewListDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceCrewList; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceCrewList), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[CrewListReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceCrewList); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return CrewListDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .crewId(rs.getString("crew_id")) - .shipNm(rs.getString("ship_nm")) - .ntnlty(rs.getString("ntnlty")) - .crewRstrYmd(rs.getString("crew_rstr_ymd")) - .oaCrewCnt(rs.getBigDecimal("oa_crew_cnt")) - .genCrewCnt(rs.getBigDecimal("gen_crew_cnt")) - .offcrCnt(rs.getBigDecimal("offcr_cnt")) - .apprOffcrCnt(rs.getBigDecimal("appr_offcr_cnt")) - .trneCnt(rs.getBigDecimal("trne_cnt")) - .embrkMntncCrewCnt(rs.getBigDecimal("embrk_mntnc_crew_cnt")) - .unrprtCnt(rs.getBigDecimal("unrprt_cnt")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceCrewList); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected CrewListDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return CrewListDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .crewId(rs.getString("crew_id")) + .shipNm(rs.getString("ship_nm")) + .ntnlty(rs.getString("ntnlty")) + .crewRstrYmd(rs.getString("crew_rstr_ymd")) + .oaCrewCnt(rs.getBigDecimal("oa_crew_cnt")) + .genCrewCnt(rs.getBigDecimal("gen_crew_cnt")) + .offcrCnt(rs.getBigDecimal("offcr_cnt")) + .apprOffcrCnt(rs.getBigDecimal("appr_offcr_cnt")) + .trneCnt(rs.getBigDecimal("trne_cnt")) + .embrkMntncCrewCnt(rs.getBigDecimal("embrk_mntnc_crew_cnt")) + .unrprtCnt(rs.getBigDecimal("unrprt_cnt")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/DarkActivityConfirmedReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/DarkActivityConfirmedReader.java index b053cb4..c3c1c7e 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/DarkActivityConfirmedReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/DarkActivityConfirmedReader.java @@ -1,94 +1,58 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.DarkActivityConfirmedDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class DarkActivityConfirmedReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class DarkActivityConfirmedReader extends BaseSyncReader { public DarkActivityConfirmedReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public DarkActivityConfirmedDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceDarkActivityConfirmed; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceDarkActivityConfirmed), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[DarkActivityConfirmedReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceDarkActivityConfirmed); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return DarkActivityConfirmedDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .mmsiNo(rs.getString("mmsi_no")) - .darkHr(rs.getObject("dark_hr", Long.class)) - .darkActvStatus(rs.getObject("dark_actv_status", Long.class)) - .shipNm(rs.getString("ship_nm")) - .darkActv(rs.getString("dark_actv")) - .zoneId(rs.getObject("zone_id", Long.class)) - .zoneNm(rs.getString("zone_nm")) - .zoneCountry(rs.getString("zone_country")) - .darkTmUtc(rs.getTimestamp("dark_tm_utc") != null ? rs.getTimestamp("dark_tm_utc").toLocalDateTime() : null) - .darkLat(rs.getObject("dark_lat", Double.class)) - .darkLon(rs.getObject("dark_lon", Double.class)) - .darkSpd(rs.getObject("dark_spd", Double.class)) - .darkHeading(rs.getObject("dark_heading", Double.class)) - .darkDraft(rs.getObject("dark_draft", Double.class)) - .nxtCptrTmUtc(rs.getTimestamp("nxt_cptr_tm_utc") != null ? rs.getTimestamp("nxt_cptr_tm_utc").toLocalDateTime() : null) - .nxtCptrSpd(rs.getObject("nxt_cptr_spd", Double.class)) - .nxtCptrDraft(rs.getObject("nxt_cptr_draft", Double.class)) - .nxtCptrHeading(rs.getObject("nxt_cptr_heading", Double.class)) - .darkRptDestAis(rs.getString("dark_rpt_dest_ais")) - .lastPrtcllPort(rs.getString("last_prtcll_port")) - .lastPoccntryCd(rs.getString("last_poccntry_cd")) - .lastPoccntry(rs.getString("last_poccntry")) - .nxtCptrLat(rs.getObject("nxt_cptr_lat", Double.class)) - .nxtCptrLon(rs.getObject("nxt_cptr_lon", Double.class)) - .nxtCptrRptDestAis(rs.getString("nxt_cptr_rpt_dest_ais")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceDarkActivityConfirmed); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected DarkActivityConfirmedDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return DarkActivityConfirmedDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .mmsiNo(rs.getString("mmsi_no")) + .darkHr(rs.getObject("dark_hr", Long.class)) + .darkActvStatus(rs.getObject("dark_actv_status", Long.class)) + .shipNm(rs.getString("ship_nm")) + .darkActv(rs.getString("dark_actv")) + .zoneId(rs.getObject("zone_id", Long.class)) + .zoneNm(rs.getString("zone_nm")) + .zoneCountry(rs.getString("zone_country")) + .darkTmUtc(rs.getTimestamp("dark_tm_utc") != null ? rs.getTimestamp("dark_tm_utc").toLocalDateTime() : null) + .darkLat(rs.getObject("dark_lat", Double.class)) + .darkLon(rs.getObject("dark_lon", Double.class)) + .darkSpd(rs.getObject("dark_spd", Double.class)) + .darkHeading(rs.getObject("dark_heading", Double.class)) + .darkDraft(rs.getObject("dark_draft", Double.class)) + .nxtCptrTmUtc(rs.getTimestamp("nxt_cptr_tm_utc") != null ? rs.getTimestamp("nxt_cptr_tm_utc").toLocalDateTime() : null) + .nxtCptrSpd(rs.getObject("nxt_cptr_spd", Double.class)) + .nxtCptrDraft(rs.getObject("nxt_cptr_draft", Double.class)) + .nxtCptrHeading(rs.getObject("nxt_cptr_heading", Double.class)) + .darkRptDestAis(rs.getString("dark_rpt_dest_ais")) + .lastPrtcllPort(rs.getString("last_prtcll_port")) + .lastPoccntryCd(rs.getString("last_poccntry_cd")) + .lastPoccntry(rs.getString("last_poccntry")) + .nxtCptrLat(rs.getObject("nxt_cptr_lat", Double.class)) + .nxtCptrLon(rs.getObject("nxt_cptr_lon", Double.class)) + .nxtCptrRptDestAis(rs.getString("nxt_cptr_rpt_dest_ais")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/FlagHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/FlagHistoryReader.java index be404c3..e27d2d6 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/FlagHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/FlagHistoryReader.java @@ -1,73 +1,37 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.FlagHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class FlagHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class FlagHistoryReader extends BaseSyncReader { public FlagHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public FlagHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceFlagHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceFlagHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[FlagHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceFlagHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return FlagHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipCountryHstrySeq(rs.getString("ship_country_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .countryCd(rs.getString("country_cd")) - .country(rs.getString("country")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceFlagHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected FlagHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return FlagHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipCountryHstrySeq(rs.getString("ship_country_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .countryCd(rs.getString("country_cd")) + .country(rs.getString("country")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/GroupBeneficialOwnerHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/GroupBeneficialOwnerHistoryReader.java index a59d587..1f2d935 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/GroupBeneficialOwnerHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/GroupBeneficialOwnerHistoryReader.java @@ -1,74 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.GroupBeneficialOwnerHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class GroupBeneficialOwnerHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class GroupBeneficialOwnerHistoryReader extends BaseSyncReader { public GroupBeneficialOwnerHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public GroupBeneficialOwnerHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceGroupBeneficialOwnerHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceGroupBeneficialOwnerHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[GroupBeneficialOwnerHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceGroupBeneficialOwnerHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return GroupBeneficialOwnerHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipGroupRevnOwnrHstrySeq(rs.getString("ship_group_revn_ownr_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .groupActlOwnrCd(rs.getString("group_actl_ownr_cd")) - .groupActlOwnr(rs.getString("group_actl_ownr")) - .companyStatus(rs.getString("company_status")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceGroupBeneficialOwnerHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected GroupBeneficialOwnerHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return GroupBeneficialOwnerHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipGroupRevnOwnrHstrySeq(rs.getString("ship_group_revn_ownr_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .groupActlOwnrCd(rs.getString("group_actl_ownr_cd")) + .groupActlOwnr(rs.getString("group_actl_ownr")) + .companyStatus(rs.getString("company_status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/IceClassReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/IceClassReader.java index 232ecdb..2d0a267 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/IceClassReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/IceClassReader.java @@ -1,71 +1,35 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.IceClassDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class IceClassReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class IceClassReader extends BaseSyncReader { public IceClassReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public IceClassDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceIceClass; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceIceClass), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[IceClassReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceIceClass); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return IceClassDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .iceGrdCd(rs.getString("ice_grd_cd")) - .iceGrd(rs.getString("ice_grd")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceIceClass); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected IceClassDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return IceClassDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .iceGrdCd(rs.getString("ice_grd_cd")) + .iceGrd(rs.getString("ice_grd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/NameHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/NameHistoryReader.java index 07dba2c..d810458 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/NameHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/NameHistoryReader.java @@ -1,72 +1,36 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.NameHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class NameHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class NameHistoryReader extends BaseSyncReader { public NameHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public NameHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceNameHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceNameHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[NameHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceNameHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return NameHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipNmChgHstrySeq(rs.getString("ship_nm_chg_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .shipNm(rs.getString("ship_nm")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceNameHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected NameHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return NameHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipNmChgHstrySeq(rs.getString("ship_nm_chg_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .shipNm(rs.getString("ship_nm")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OperatorHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OperatorHistoryReader.java index c24687f..87aca5f 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OperatorHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OperatorHistoryReader.java @@ -1,74 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.OperatorHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class OperatorHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class OperatorHistoryReader extends BaseSyncReader { public OperatorHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public OperatorHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceOperatorHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceOperatorHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[OperatorHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceOperatorHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return OperatorHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipOperatorHstrySeq(rs.getString("ship_operator_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .shipOperatorCd(rs.getString("ship_operator_cd")) - .shipOperator(rs.getString("ship_operator")) - .companyStatus(rs.getString("company_status")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceOperatorHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected OperatorHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return OperatorHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipOperatorHstrySeq(rs.getString("ship_operator_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .shipOperatorCd(rs.getString("ship_operator_cd")) + .shipOperator(rs.getString("ship_operator")) + .companyStatus(rs.getString("company_status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OwnerHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OwnerHistoryReader.java index 416a4c4..fac0967 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OwnerHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/OwnerHistoryReader.java @@ -1,74 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.OwnerHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class OwnerHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class OwnerHistoryReader extends BaseSyncReader { public OwnerHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public OwnerHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceOwnerHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceOwnerHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[OwnerHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceOwnerHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return OwnerHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipOwnrHstrySeq(rs.getString("ship_ownr_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .ownrCd(rs.getString("ownr_cd")) - .ownr(rs.getString("ownr")) - .companyStatus(rs.getString("company_status")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceOwnerHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected OwnerHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return OwnerHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipOwnrHstrySeq(rs.getString("ship_ownr_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .ownrCd(rs.getString("ownr_cd")) + .ownr(rs.getString("ownr")) + .companyStatus(rs.getString("company_status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/PandIHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/PandIHistoryReader.java index 0733783..91be782 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/PandIHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/PandIHistoryReader.java @@ -1,74 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.PandIHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class PandIHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class PandIHistoryReader extends BaseSyncReader { public PandIHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public PandIHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourcePandiHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourcePandiHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[PandIHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourcePandiHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return PandIHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipPrtcRpnHstrySeq(rs.getString("ship_prtc_rpn_hstry_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .pniClubCd(rs.getString("pni_club_cd")) - .pniClubNm(rs.getString("pni_club_nm")) - .src(rs.getString("src")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourcePandiHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected PandIHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return PandIHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipPrtcRpnHstrySeq(rs.getString("ship_prtc_rpn_hstry_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .pniClubCd(rs.getString("pni_club_cd")) + .pniClubNm(rs.getString("pni_club_nm")) + .src(rs.getString("src")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SafetyManagementCertificateHistReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SafetyManagementCertificateHistReader.java index 9e9ecd2..9481078 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SafetyManagementCertificateHistReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SafetyManagementCertificateHistReader.java @@ -1,82 +1,46 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.SafetyManagementCertificateHistDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class SafetyManagementCertificateHistReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class SafetyManagementCertificateHistReader extends BaseSyncReader { public SafetyManagementCertificateHistReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public SafetyManagementCertificateHistDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceSafetyManagementCertificateHist; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceSafetyManagementCertificateHist), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[SafetyManagementCertificateHistReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceSafetyManagementCertificateHist); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return SafetyManagementCertificateHistDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipSftyMngEvdcSeq(rs.getString("ship_sfty_mng_evdc_seq")) - .smgrcSrngEngines(rs.getString("smgrc_srng_engines")) - .smgrcSysCatConvArbt(rs.getString("smgrc_sys_cat_conv_arbt")) - .smgrcExpryDay(rs.getString("smgrc_expry_day")) - .smgrcIssueDay(rs.getString("smgrc_issue_day")) - .smgrcDoccCompany(rs.getString("smgrc_docc_company")) - .smgrcNtnlty(rs.getString("smgrc_ntnlty")) - .smgrcIssueEngines(rs.getString("smgrc_issue_engines")) - .smgrcEtcDesc(rs.getString("smgrc_etc_desc")) - .smgrcShipNm(rs.getString("smgrc_ship_nm")) - .smgrcShipType(rs.getString("smgrc_ship_type")) - .smgrcSrc(rs.getString("smgrc_src")) - .smgrcCompanyCd(rs.getString("smgrc_company_cd")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceSafetyManagementCertificateHist); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected SafetyManagementCertificateHistDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return SafetyManagementCertificateHistDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipSftyMngEvdcSeq(rs.getString("ship_sfty_mng_evdc_seq")) + .smgrcSrngEngines(rs.getString("smgrc_srng_engines")) + .smgrcSysCatConvArbt(rs.getString("smgrc_sys_cat_conv_arbt")) + .smgrcExpryDay(rs.getString("smgrc_expry_day")) + .smgrcIssueDay(rs.getString("smgrc_issue_day")) + .smgrcDoccCompany(rs.getString("smgrc_docc_company")) + .smgrcNtnlty(rs.getString("smgrc_ntnlty")) + .smgrcIssueEngines(rs.getString("smgrc_issue_engines")) + .smgrcEtcDesc(rs.getString("smgrc_etc_desc")) + .smgrcShipNm(rs.getString("smgrc_ship_nm")) + .smgrcShipType(rs.getString("smgrc_ship_type")) + .smgrcSrc(rs.getString("smgrc_src")) + .smgrcCompanyCd(rs.getString("smgrc_company_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipAddInfoReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipAddInfoReader.java index e4f1efe..0ca15a1 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipAddInfoReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipAddInfoReader.java @@ -1,84 +1,44 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.ShipAddInfoDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class ShipAddInfoReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ShipAddInfoReader extends BaseSyncReader { public ShipAddInfoReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ShipAddInfoDto read() throws Exception { - // 1. 버퍼가 비어있을 때만 DB에서 "다음 처리 대상 ID 하나"의 데이터를 긁어옵니다. - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; // 진짜 데이터가 없으면 종료 - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceAdditionalShipsData; } - private void fetchNextGroup() { - // 1. 아직 'N'인 최소 ID 하나를 찾음 - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceAdditionalShipsData), Long.class); - } catch (Exception e) { - return; // 대상 없음 - } - - if (nextTargetId != null) { - log.info("[ShipAddInfoReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - // 2. 해당 ID의 데이터만 버퍼에 로드 - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceAdditionalShipsData); - final Long targetId = nextTargetId; // lambda 내부에서 사용하기 위해 final 변수로 - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return ShipAddInfoDto.builder() - .jobExecutionId(targetId) // job_execution_id 설정 - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipEml(rs.getString("ship_eml")) - .maxDpwt(rs.getString("max_dpwt")) - .maxDrillDepth(rs.getString("max_drill_depth")) - .drillBrg(rs.getString("drill_brg")) - .oceanProdFacility(rs.getString("ocean_prod_facility")) - .deckHeatExch(rs.getString("deck_heat_exch")) - .dehtexMatral(rs.getString("dehtex_matral")) - .portblTwinDeck(rs.getString("portbl_twin_deck")) - .fixedTwinDeck(rs.getString("fixed_twin_deck")) - .shipSatlitCommId(rs.getString("ship_satlit_comm_id")) - .shipSatlitCmrspCd(rs.getString("ship_satlit_cmrsp_cd")) - .build(); - }, nextTargetId); - - // 3. 해당 ID 'P'로 변경 - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceAdditionalShipsData); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected ShipAddInfoDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return ShipAddInfoDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipEml(rs.getString("ship_eml")) + .maxDpwt(rs.getString("max_dpwt")) + .maxDrillDepth(rs.getString("max_drill_depth")) + .drillBrg(rs.getString("drill_brg")) + .oceanProdFacility(rs.getString("ocean_prod_facility")) + .deckHeatExch(rs.getString("deck_heat_exch")) + .dehtexMatral(rs.getString("dehtex_matral")) + .portblTwinDeck(rs.getString("portbl_twin_deck")) + .fixedTwinDeck(rs.getString("fixed_twin_deck")) + .shipSatlitCommId(rs.getString("ship_satlit_comm_id")) + .shipSatlitCmrspCd(rs.getString("ship_satlit_cmrsp_cd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipDataReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipDataReader.java index 8a3c792..aced5f2 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipDataReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipDataReader.java @@ -1,156 +1,115 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.ShipInfoMstDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class ShipDataReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ShipDataReader extends BaseSyncReader { public ShipDataReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ShipInfoMstDto read() throws Exception { - // 1. 버퍼가 비어있을 때만 DB에서 "다음 처리 대상 ID 하나"의 데이터를 긁어옵니다. - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; // 진짜 데이터가 없으면 종료 - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceShipDetailData; } - - private void fetchNextGroup() { - // 1. 아직 'N'인 최소 ID 하나를 찾음 - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject(CommonSql.getNextTargetQuery(tableMetaInfo.sourceShipDetailData), Long.class); - } catch (Exception e) { - return; // 대상 없음 - } - - if (nextTargetId != null) { - log.info("[ShipDataReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - // 2. 해당 ID의 데이터만 버퍼에 로드 - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceShipDetailData); - final Long targetId = nextTargetId; // lambda 내부에서 사용하기 위해 final 변수로 - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return ShipInfoMstDto.builder() - .jobExecutionId(targetId) // job_execution_id 설정 - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .mmsiNo(rs.getString("mmsi_no")) - .shipNm(rs.getString("ship_nm")) - .clsgnNo(rs.getString("clsgn_no")) - .frmlaRegNo(rs.getString("frmla_reg_no")) - .fshrPrmtNo(rs.getString("fshr_prmt_no")) - .shipNtnlty(rs.getString("ship_ntnlty")) - .ntnltyCd(rs.getString("ntnlty_cd")) - .loadPort(rs.getString("load_port")) - .clfic(rs.getString("clfic")) - .clficDesc(rs.getString("clfic_desc")) - .shipStatus(rs.getString("ship_status")) - .shipTypeGroup(rs.getString("ship_type_group")) - .shipTypeLvTwo(rs.getString("ship_type_lv_two")) - .shipTypeLvThr(rs.getString("ship_type_lv_thr")) - .shipTypeLvFour(rs.getString("ship_type_lv_four")) - .shipTypeLvFive(rs.getString("ship_type_lv_five")) - .shipTypeLvFiveDtldType(rs.getString("ship_type_lv_five_dtld_type")) - .shipTypeLvFiveHullType(rs.getString("ship_type_lv_five_hull_type")) - .shipTypeLvFiveLwrnkGroup(rs.getString("ship_type_lv_five_lwrnk_group")) - .buildYy(rs.getString("build_yy")) - .buildYmd(rs.getString("build_ymd")) - .shpyrd(rs.getString("shpyrd")) - .shpyrdOffclNm(rs.getString("shpyrd_offcl_nm")) - .shpyrdBuildNo(rs.getString("shpyrd_build_no")) - .buildDesc(rs.getString("build_desc")) - .modfHstryDesc(rs.getString("modf_hstry_desc")) - .whlnthLoa(rs.getString("whlnth_loa")) - .regLength(rs.getString("reg_length")) - .lbp(rs.getString("lbp")) - .formnBreadth(rs.getString("formn_breadth")) - .maxBreadth(rs.getString("max_breadth")) - .depth(rs.getString("depth")) - .draft(rs.getString("draft")) - .keelMastHg(rs.getString("keel_mast_hg")) - .bulbBow(rs.getString("bulb_bow")) - .gt(rs.getString("gt")) - .ntTon(rs.getString("nt_ton")) - .dwt(rs.getString("dwt")) - .displacement(rs.getString("displacement")) - .lightDisplacementTon(rs.getString("light_displacement_ton")) - .cgt(rs.getString("cgt")) - .fldngOneCmPerTonTpci(rs.getString("fldng_one_cm_per_ton_tpci")) - .tonEfectDay(rs.getString("ton_efect_day")) - .calcfrmDwt(rs.getString("calcfrm_dwt")) - .teuCnt(rs.getString("teu_cnt")) - .teuCapacity(rs.getString("teu_capacity")) - .grainCapacityM3(rs.getString("grain_capacity_m3")) - .baleCapacity(rs.getString("bale_capacity")) - .liquidCapacity(rs.getString("liquid_capacity")) - .gasM3(rs.getString("gas_m3")) - .insulatedM3(rs.getString("insulated_m3")) - .passengerCapacity(rs.getString("passenger_capacity")) - .bollardPull(rs.getString("bollard_pull")) - .svcSpd(rs.getString("svc_spd")) - .mainEngineType(rs.getString("main_engine_type")) - .fuelCnsmpSpdOne(rs.getString("fuel_cnsmp_spd_one")) - .fuelCnsmpamtValOne(rs.getString("fuel_cnsmpamt_val_one")) - .fuelCnsmpSpdTwo(rs.getString("fuel_cnsmp_spd_two")) - .fuelCnsmpamtValTwo(rs.getString("fuel_cnsmpamt_val_two")) - .totalFuelCapacityM3(rs.getString("total_fuel_capacity_m3")) - .blrMftr(rs.getString("blr_mftr")) - .proplrMftr(rs.getString("proplr_mftr")) - .cargoCapacityM3Desc(rs.getString("cargo_capacity_m3_desc")) - .eqpmntDesc(rs.getString("eqpmnt_desc")) - .hdn(rs.getString("hdn")) - .hatcheDesc(rs.getString("hatche_desc")) - .laneDoorRampDesc(rs.getString("lane_door_ramp_desc")) - .spcTankDesc(rs.getString("spc_tank_desc")) - .tankDesc(rs.getString("tank_desc")) - .prmovrDesc(rs.getString("prmovr_desc")) - .prmovrOvrvwDesc(rs.getString("prmovr_ovrvw_desc")) - .auxDesc(rs.getString("aux_desc")) - .asstGnrtrDesc(rs.getString("asst_gnrtr_desc")) - .fuelDesc(rs.getString("fuel_desc")) - .docCompanyCd(rs.getString("doc_company_cd")) - .groupActlOwnrCompanyCd(rs.getString("group_actl_ownr_company_cd")) - .operator(rs.getString("operator")) - .operatorCompanyCd(rs.getString("operator_company_cd")) - .shipMngrCompanyCd(rs.getString("ship_mngr_company_cd")) - .techMngrCd(rs.getString("tech_mngr_cd")) - .regShponrCd(rs.getString("reg_shponr_cd")) - .lastMdfcnDt(rs.getString("last_mdfcn_dt")) - .build(); - }, nextTargetId); - - // 3. 해당 ID 'P'로 변경 - updateBatchProcessing(nextTargetId); - } + @Override + protected ShipInfoMstDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return ShipInfoMstDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .mmsiNo(rs.getString("mmsi_no")) + .shipNm(rs.getString("ship_nm")) + .clsgnNo(rs.getString("clsgn_no")) + .frmlaRegNo(rs.getString("frmla_reg_no")) + .fshrPrmtNo(rs.getString("fshr_prmt_no")) + .shipNtnlty(rs.getString("ship_ntnlty")) + .ntnltyCd(rs.getString("ntnlty_cd")) + .loadPort(rs.getString("load_port")) + .clfic(rs.getString("clfic")) + .clficDesc(rs.getString("clfic_desc")) + .shipStatus(rs.getString("ship_status")) + .shipTypeGroup(rs.getString("ship_type_group")) + .shipTypeLvTwo(rs.getString("ship_type_lv_two")) + .shipTypeLvThr(rs.getString("ship_type_lv_thr")) + .shipTypeLvFour(rs.getString("ship_type_lv_four")) + .shipTypeLvFive(rs.getString("ship_type_lv_five")) + .shipTypeLvFiveDtldType(rs.getString("ship_type_lv_five_dtld_type")) + .shipTypeLvFiveHullType(rs.getString("ship_type_lv_five_hull_type")) + .shipTypeLvFiveLwrnkGroup(rs.getString("ship_type_lv_five_lwrnk_group")) + .buildYy(rs.getString("build_yy")) + .buildYmd(rs.getString("build_ymd")) + .shpyrd(rs.getString("shpyrd")) + .shpyrdOffclNm(rs.getString("shpyrd_offcl_nm")) + .shpyrdBuildNo(rs.getString("shpyrd_build_no")) + .buildDesc(rs.getString("build_desc")) + .modfHstryDesc(rs.getString("modf_hstry_desc")) + .whlnthLoa(rs.getString("whlnth_loa")) + .regLength(rs.getString("reg_length")) + .lbp(rs.getString("lbp")) + .formnBreadth(rs.getString("formn_breadth")) + .maxBreadth(rs.getString("max_breadth")) + .depth(rs.getString("depth")) + .draft(rs.getString("draft")) + .keelMastHg(rs.getString("keel_mast_hg")) + .bulbBow(rs.getString("bulb_bow")) + .gt(rs.getString("gt")) + .ntTon(rs.getString("nt_ton")) + .dwt(rs.getString("dwt")) + .displacement(rs.getString("displacement")) + .lightDisplacementTon(rs.getString("light_displacement_ton")) + .cgt(rs.getString("cgt")) + .fldngOneCmPerTonTpci(rs.getString("fldng_one_cm_per_ton_tpci")) + .tonEfectDay(rs.getString("ton_efect_day")) + .calcfrmDwt(rs.getString("calcfrm_dwt")) + .teuCnt(rs.getString("teu_cnt")) + .teuCapacity(rs.getString("teu_capacity")) + .grainCapacityM3(rs.getString("grain_capacity_m3")) + .baleCapacity(rs.getString("bale_capacity")) + .liquidCapacity(rs.getString("liquid_capacity")) + .gasM3(rs.getString("gas_m3")) + .insulatedM3(rs.getString("insulated_m3")) + .passengerCapacity(rs.getString("passenger_capacity")) + .bollardPull(rs.getString("bollard_pull")) + .svcSpd(rs.getString("svc_spd")) + .mainEngineType(rs.getString("main_engine_type")) + .fuelCnsmpSpdOne(rs.getString("fuel_cnsmp_spd_one")) + .fuelCnsmpamtValOne(rs.getString("fuel_cnsmpamt_val_one")) + .fuelCnsmpSpdTwo(rs.getString("fuel_cnsmp_spd_two")) + .fuelCnsmpamtValTwo(rs.getString("fuel_cnsmpamt_val_two")) + .totalFuelCapacityM3(rs.getString("total_fuel_capacity_m3")) + .blrMftr(rs.getString("blr_mftr")) + .proplrMftr(rs.getString("proplr_mftr")) + .cargoCapacityM3Desc(rs.getString("cargo_capacity_m3_desc")) + .eqpmntDesc(rs.getString("eqpmnt_desc")) + .hdn(rs.getString("hdn")) + .hatcheDesc(rs.getString("hatche_desc")) + .laneDoorRampDesc(rs.getString("lane_door_ramp_desc")) + .spcTankDesc(rs.getString("spc_tank_desc")) + .tankDesc(rs.getString("tank_desc")) + .prmovrDesc(rs.getString("prmovr_desc")) + .prmovrOvrvwDesc(rs.getString("prmovr_ovrvw_desc")) + .auxDesc(rs.getString("aux_desc")) + .asstGnrtrDesc(rs.getString("asst_gnrtr_desc")) + .fuelDesc(rs.getString("fuel_desc")) + .docCompanyCd(rs.getString("doc_company_cd")) + .groupActlOwnrCompanyCd(rs.getString("group_actl_ownr_company_cd")) + .operator(rs.getString("operator")) + .operatorCompanyCd(rs.getString("operator_company_cd")) + .shipMngrCompanyCd(rs.getString("ship_mngr_company_cd")) + .techMngrCd(rs.getString("tech_mngr_cd")) + .regShponrCd(rs.getString("reg_shponr_cd")) + .lastMdfcnDt(rs.getString("last_mdfcn_dt")) + .build(); } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceShipDetailData); - businessJdbcTemplate.update(sql, targetExecutionId); - } - } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipManagerHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipManagerHistoryReader.java index 452bf3e..a9ffc50 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipManagerHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ShipManagerHistoryReader.java @@ -1,74 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.ShipManagerHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class ShipManagerHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ShipManagerHistoryReader extends BaseSyncReader { public ShipManagerHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ShipManagerHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - - if (allDataBuffer.isEmpty()) { - return null; - } - - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceShipManagerHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceShipManagerHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[ShipManagerHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceShipManagerHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return ShipManagerHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipMngCompanySeq(rs.getString("ship_mng_company_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .shipMngrCd(rs.getString("ship_mngr_cd")) - .shipMngr(rs.getString("ship_mngr")) - .companyStatus(rs.getString("company_status")) - .build(); - }, nextTargetId); - - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceShipManagerHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected ShipManagerHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return ShipManagerHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipMngCompanySeq(rs.getString("ship_mng_company_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .shipMngrCd(rs.getString("ship_mngr_cd")) + .shipMngr(rs.getString("ship_mngr")) + .companyStatus(rs.getString("company_status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SisterShipLinksReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SisterShipLinksReader.java index 6bd9ab7..615a4a3 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SisterShipLinksReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SisterShipLinksReader.java @@ -1,66 +1,34 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.SisterShipLinksDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class SisterShipLinksReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class SisterShipLinksReader extends BaseSyncReader { public SisterShipLinksReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public SisterShipLinksDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceSisterShipLinks; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceSisterShipLinks), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[SisterShipLinksReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceSisterShipLinks); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return SisterShipLinksDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .linkImoNo(rs.getString("link_imo_no")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceSisterShipLinks); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected SisterShipLinksDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return SisterShipLinksDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .linkImoNo(rs.getString("link_imo_no")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SpecialFeatureReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SpecialFeatureReader.java index 0032157..6297353 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SpecialFeatureReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SpecialFeatureReader.java @@ -1,68 +1,36 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.SpecialFeatureDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class SpecialFeatureReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class SpecialFeatureReader extends BaseSyncReader { public SpecialFeatureReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public SpecialFeatureDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceSpecialFeature; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceSpecialFeature), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[SpecialFeatureReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceSpecialFeature); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return SpecialFeatureDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipSpcFetrSeq(rs.getString("ship_spc_fetr_seq")) - .spcMttrCd(rs.getString("spc_mttr_cd")) - .spcMttr(rs.getString("spc_mttr")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceSpecialFeature); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected SpecialFeatureDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return SpecialFeatureDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipSpcFetrSeq(rs.getString("ship_spc_fetr_seq")) + .spcMttrCd(rs.getString("spc_mttr_cd")) + .spcMttr(rs.getString("spc_mttr")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StatusHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StatusHistoryReader.java index ef55147..dc2eeab 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StatusHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StatusHistoryReader.java @@ -1,69 +1,37 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.StatusHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class StatusHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class StatusHistoryReader extends BaseSyncReader { public StatusHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public StatusHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceStatusHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceStatusHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[StatusHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceStatusHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return StatusHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipStatusHstrySeq(rs.getString("ship_status_hstry_seq")) - .statusCd(rs.getString("status_cd")) - .statusChgYmd(rs.getString("status_chg_ymd")) - .status(rs.getString("status")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceStatusHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected StatusHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return StatusHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipStatusHstrySeq(rs.getString("ship_status_hstry_seq")) + .statusCd(rs.getString("status_cd")) + .statusChgYmd(rs.getString("status_chg_ymd")) + .status(rs.getString("status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StowageCommodityReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StowageCommodityReader.java index 416b5ef..88970ff 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StowageCommodityReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/StowageCommodityReader.java @@ -1,70 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.StowageCommodityDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class StowageCommodityReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class StowageCommodityReader extends BaseSyncReader { public StowageCommodityReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public StowageCommodityDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceStowageCommodity; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceStowageCommodity), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[StowageCommodityReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceStowageCommodity); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return StowageCommodityDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipCargoCapacitySeq(rs.getString("ship_cargo_capacity_seq")) - .capacityCd(rs.getString("capacity_cd")) - .capacityCdDesc(rs.getString("capacity_cd_desc")) - .cargoCd(rs.getString("cargo_cd")) - .cargoNm(rs.getString("cargo_nm")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceStowageCommodity); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected StowageCommodityDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return StowageCommodityDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipCargoCapacitySeq(rs.getString("ship_cargo_capacity_seq")) + .capacityCd(rs.getString("capacity_cd")) + .capacityCdDesc(rs.getString("capacity_cd_desc")) + .cargoCd(rs.getString("cargo_cd")) + .cargoNm(rs.getString("cargo_nm")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesHistoryUniqueReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesHistoryUniqueReader.java index d30a5ff..b2e0f86 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesHistoryUniqueReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesHistoryUniqueReader.java @@ -1,69 +1,37 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.SurveyDatesHistoryUniqueDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class SurveyDatesHistoryUniqueReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class SurveyDatesHistoryUniqueReader extends BaseSyncReader { public SurveyDatesHistoryUniqueReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public SurveyDatesHistoryUniqueDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceSurveyDatesHistoryUnique; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceSurveyDatesHistoryUnique), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[SurveyDatesHistoryUniqueReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceSurveyDatesHistoryUnique); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return SurveyDatesHistoryUniqueDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .clficCd(rs.getString("clfic_cd")) - .inspectionType(rs.getString("inspection_type")) - .inspectionYmd(rs.getString("inspection_ymd")) - .clfic(rs.getString("clfic")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceSurveyDatesHistoryUnique); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected SurveyDatesHistoryUniqueDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return SurveyDatesHistoryUniqueDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .clficCd(rs.getString("clfic_cd")) + .inspectionType(rs.getString("inspection_type")) + .inspectionYmd(rs.getString("inspection_ymd")) + .clfic(rs.getString("clfic")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesReader.java index 5611cc6..0ac4f45 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/SurveyDatesReader.java @@ -1,72 +1,40 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.SurveyDatesDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class SurveyDatesReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class SurveyDatesReader extends BaseSyncReader { public SurveyDatesReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public SurveyDatesDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceSurveyDates; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceSurveyDates), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[SurveyDatesReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceSurveyDates); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return SurveyDatesDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .clficCd(rs.getString("clfic_cd")) - .clfic(rs.getString("clfic")) - .dckngInspection(rs.getString("dckng_inspection")) - .fxtmInspection(rs.getString("fxtm_inspection")) - .annualInspection(rs.getString("annual_inspection")) - .mchnFxtmInspectionYmd(rs.getString("mchn_fxtm_inspection_ymd")) - .tlsftInspectionYmd(rs.getString("tlsft_inspection_ymd")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceSurveyDates); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected SurveyDatesDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return SurveyDatesDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .clficCd(rs.getString("clfic_cd")) + .clfic(rs.getString("clfic")) + .dckngInspection(rs.getString("dckng_inspection")) + .fxtmInspection(rs.getString("fxtm_inspection")) + .annualInspection(rs.getString("annual_inspection")) + .mchnFxtmInspectionYmd(rs.getString("mchn_fxtm_inspection_ymd")) + .tlsftInspectionYmd(rs.getString("tlsft_inspection_ymd")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TbCompanyDetailReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TbCompanyDetailReader.java index 9ec5fb3..067520a 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TbCompanyDetailReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TbCompanyDetailReader.java @@ -1,93 +1,61 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.TbCompanyDetailDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class TbCompanyDetailReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class TbCompanyDetailReader extends BaseSyncReader { public TbCompanyDetailReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public TbCompanyDetailDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTbCompanyDetail; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTbCompanyDetail), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[TbCompanyDetailReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTbCompanyDetail); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return TbCompanyDetailDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .companyCd(rs.getString("company_cd")) - .lastUpdYmd(rs.getString("last_upd_ymd")) - .careCd(rs.getString("care_cd")) - .companyStatus(rs.getString("company_status")) - .fullNm(rs.getString("full_nm")) - .companyNameAbbr(rs.getString("company_name_abbr")) - .companyFndnYmd(rs.getString("company_fndn_ymd")) - .prntCompanyCd(rs.getString("prnt_company_cd")) - .countryNm(rs.getString("country_nm")) - .ctyNm(rs.getString("cty_nm")) - .oaAddr(rs.getString("oa_addr")) - .emlAddr(rs.getString("eml_addr")) - .tel(rs.getString("tel")) - .faxNo(rs.getString("fax_no")) - .wbstUrl(rs.getString("wbst_url")) - .countryCtrl(rs.getString("country_ctrl")) - .countryCtrlCd(rs.getString("country_ctrl_cd")) - .countryReg(rs.getString("country_reg")) - .countryRegCd(rs.getString("country_reg_cd")) - .regionCd(rs.getString("region_cd")) - .distNm(rs.getString("dist_nm")) - .distNo(rs.getString("dist_no")) - .mailAddrRear(rs.getString("mail_addr_rear")) - .mailAddrFrnt(rs.getString("mail_addr_frnt")) - .poBox(rs.getString("po_box")) - .dtlAddrOne(rs.getString("dtl_addr_one")) - .dtlAddrTwo(rs.getString("dtl_addr_two")) - .dtlAddrThr(rs.getString("dtl_addr_thr")) - .tlx(rs.getString("tlx")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTbCompanyDetail); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected TbCompanyDetailDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return TbCompanyDetailDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .companyCd(rs.getString("company_cd")) + .lastUpdYmd(rs.getString("last_upd_ymd")) + .careCd(rs.getString("care_cd")) + .companyStatus(rs.getString("company_status")) + .fullNm(rs.getString("full_nm")) + .companyNameAbbr(rs.getString("company_name_abbr")) + .companyFndnYmd(rs.getString("company_fndn_ymd")) + .prntCompanyCd(rs.getString("prnt_company_cd")) + .countryNm(rs.getString("country_nm")) + .ctyNm(rs.getString("cty_nm")) + .oaAddr(rs.getString("oa_addr")) + .emlAddr(rs.getString("eml_addr")) + .tel(rs.getString("tel")) + .faxNo(rs.getString("fax_no")) + .wbstUrl(rs.getString("wbst_url")) + .countryCtrl(rs.getString("country_ctrl")) + .countryCtrlCd(rs.getString("country_ctrl_cd")) + .countryReg(rs.getString("country_reg")) + .countryRegCd(rs.getString("country_reg_cd")) + .regionCd(rs.getString("region_cd")) + .distNm(rs.getString("dist_nm")) + .distNo(rs.getString("dist_no")) + .mailAddrRear(rs.getString("mail_addr_rear")) + .mailAddrFrnt(rs.getString("mail_addr_frnt")) + .poBox(rs.getString("po_box")) + .dtlAddrOne(rs.getString("dtl_addr_one")) + .dtlAddrTwo(rs.getString("dtl_addr_two")) + .dtlAddrThr(rs.getString("dtl_addr_thr")) + .tlx(rs.getString("tlx")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TechnicalManagerHistoryReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TechnicalManagerHistoryReader.java index 1b07d39..9613ad5 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TechnicalManagerHistoryReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/TechnicalManagerHistoryReader.java @@ -1,70 +1,38 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.TechnicalManagerHistoryDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class TechnicalManagerHistoryReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class TechnicalManagerHistoryReader extends BaseSyncReader { public TechnicalManagerHistoryReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public TechnicalManagerHistoryDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceTechnicalManagerHistory; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceTechnicalManagerHistory), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[TechnicalManagerHistoryReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceTechnicalManagerHistory); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return TechnicalManagerHistoryDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .shipTechMngCompanySeq(rs.getString("ship_tech_mng_company_seq")) - .efectStaDay(rs.getString("efect_sta_day")) - .techMngrCd(rs.getString("tech_mngr_cd")) - .techMngr(rs.getString("tech_mngr")) - .companyStatus(rs.getString("company_status")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceTechnicalManagerHistory); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected TechnicalManagerHistoryDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return TechnicalManagerHistoryDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .shipTechMngCompanySeq(rs.getString("ship_tech_mng_company_seq")) + .efectStaDay(rs.getString("efect_sta_day")) + .techMngrCd(rs.getString("tech_mngr_cd")) + .techMngr(rs.getString("tech_mngr")) + .companyStatus(rs.getString("company_status")) + .build(); } } diff --git a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ThrustersReader.java b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ThrustersReader.java index c25a0dc..faeaa10 100644 --- a/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ThrustersReader.java +++ b/src/main/java/com/snp/batch/jobs/datasync/batch/ship/reader/ThrustersReader.java @@ -1,73 +1,41 @@ package com.snp.batch.jobs.datasync.batch.ship.reader; -import com.snp.batch.common.util.CommonSql; +import com.snp.batch.common.batch.reader.BaseSyncReader; import com.snp.batch.common.util.TableMetaInfo; import com.snp.batch.jobs.datasync.batch.ship.dto.ThrustersDto; import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; -import java.util.ArrayList; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; @Slf4j -public class ThrustersReader implements ItemReader { - private final TableMetaInfo tableMetaInfo; - private final JdbcTemplate businessJdbcTemplate; - private List allDataBuffer = new ArrayList<>(); +public class ThrustersReader extends BaseSyncReader { public ThrustersReader(@Qualifier("businessDataSource") DataSource businessDataSource, TableMetaInfo tableMetaInfo) { - this.businessJdbcTemplate = new JdbcTemplate(businessDataSource); - this.tableMetaInfo = tableMetaInfo; + super(businessDataSource, tableMetaInfo); } @Override - public ThrustersDto read() throws Exception { - if (allDataBuffer.isEmpty()) { - fetchNextGroup(); - } - if (allDataBuffer.isEmpty()) { - return null; - } - return allDataBuffer.remove(0); + protected String getSourceTable() { + return tableMetaInfo.sourceThrusters; } - private void fetchNextGroup() { - Long nextTargetId = null; - try { - nextTargetId = businessJdbcTemplate.queryForObject( - CommonSql.getNextTargetQuery(tableMetaInfo.sourceThrusters), Long.class); - } catch (Exception e) { - return; - } - - if (nextTargetId != null) { - log.info("[ThrustersReader] 다음 처리 대상 ID 발견: {}", nextTargetId); - String sql = CommonSql.getTargetDataQuery(tableMetaInfo.sourceThrusters); - final Long targetId = nextTargetId; - this.allDataBuffer = businessJdbcTemplate.query(sql, (rs, rowNum) -> { - return ThrustersDto.builder() - .jobExecutionId(targetId) - .datasetVer(rs.getString("dataset_ver")) - .imoNo(rs.getString("imo_no")) - .thrstrSeq(rs.getString("thrstr_seq")) - .thrstrTypeCd(rs.getString("thrstr_type_cd")) - .thrstrType(rs.getString("thrstr_type")) - .thrstrCnt(rs.getBigDecimal("thrstr_cnt")) - .thrstrPosition(rs.getString("thrstr_position")) - .thrstrPowerBhp(rs.getBigDecimal("thrstr_power_bhp")) - .thrstrPowerKw(rs.getBigDecimal("thrstr_power_kw")) - .instlMth(rs.getString("instl_mth")) - .build(); - }, nextTargetId); - updateBatchProcessing(nextTargetId); - } - } - - private void updateBatchProcessing(Long targetExecutionId) { - String sql = CommonSql.getProcessBatchQuery(tableMetaInfo.sourceThrusters); - businessJdbcTemplate.update(sql, targetExecutionId); + @Override + protected ThrustersDto mapRow(ResultSet rs, Long targetId) throws SQLException { + return ThrustersDto.builder() + .jobExecutionId(targetId) + .datasetVer(rs.getString("dataset_ver")) + .imoNo(rs.getString("imo_no")) + .thrstrSeq(rs.getString("thrstr_seq")) + .thrstrTypeCd(rs.getString("thrstr_type_cd")) + .thrstrType(rs.getString("thrstr_type")) + .thrstrCnt(rs.getBigDecimal("thrstr_cnt")) + .thrstrPosition(rs.getString("thrstr_position")) + .thrstrPowerBhp(rs.getBigDecimal("thrstr_power_bhp")) + .thrstrPowerKw(rs.getBigDecimal("thrstr_power_kw")) + .instlMth(rs.getString("instl_mth")) + .build(); } }