feat(risk): RiskRangeImportJob API URL 변경 및 저장 테이블 통합

- API: UpdatedRiskList → UpdatedRiskWithNarrativesList
- Writer: RiskDataWriter → RiskDetailDataWriter (tb_ship_risk_detail_info)
- risk-compliance-001 테이블 변경, risk-detail-001 제거
- Service WebClient 버퍼 256MB 확장 + 타임아웃 추가
This commit is contained in:
HYOJIN 2026-03-24 14:20:40 +09:00
부모 54e6130743
커밋 7474882aa9
5개의 변경된 파일13개의 추가작업 그리고 11개의 파일을 삭제

파일 보기

@ -101,16 +101,21 @@ public class MaritimeApiWebClientConfig {
@Bean(name = "maritimeServiceApiWebClient") @Bean(name = "maritimeServiceApiWebClient")
public WebClient maritimeServiceApiWebClient(){ public WebClient maritimeServiceApiWebClient(){
log.info("========================================"); log.info("========================================");
log.info("Maritime AIS API WebClient 생성"); log.info("Maritime Service API WebClient 생성");
log.info("Base URL: {}", maritimeServiceApiUrl); log.info("Base URL: {}", maritimeServiceApiUrl);
log.info("========================================"); log.info("========================================");
HttpClient httpClient = HttpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000)
.responseTimeout(Duration.ofMinutes(5));
return WebClient.builder() return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.baseUrl(maritimeServiceApiUrl) .baseUrl(maritimeServiceApiUrl)
.defaultHeaders(headers -> headers.setBasicAuth(maritimeApiUsername, maritimeApiPassword)) .defaultHeaders(headers -> headers.setBasicAuth(maritimeApiUsername, maritimeApiPassword))
.codecs(configurer -> configurer .codecs(configurer -> configurer
.defaultCodecs() .defaultCodecs()
.maxInMemorySize(100 * 1024 * 1024)) // 100MB 버퍼 .maxInMemorySize(256 * 1024 * 1024)) // 256MB 버퍼
.build(); .build();
} }
} }

파일 보기

@ -6,7 +6,7 @@ import com.snp.batch.jobs.risk.batch.dto.RiskDto;
import com.snp.batch.jobs.risk.batch.entity.RiskEntity; import com.snp.batch.jobs.risk.batch.entity.RiskEntity;
import com.snp.batch.jobs.risk.batch.processor.RiskDataProcessor; import com.snp.batch.jobs.risk.batch.processor.RiskDataProcessor;
import com.snp.batch.jobs.risk.batch.reader.RiskDataRangeReader; import com.snp.batch.jobs.risk.batch.reader.RiskDataRangeReader;
import com.snp.batch.jobs.risk.batch.writer.RiskDataWriter; import com.snp.batch.jobs.risk.batch.writer.RiskDetailDataWriter;
import com.snp.batch.service.BatchApiLogService; import com.snp.batch.service.BatchApiLogService;
import com.snp.batch.service.BatchDateService; import com.snp.batch.service.BatchDateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -35,7 +35,7 @@ import org.springframework.web.reactive.function.client.WebClient;
public class RiskImportRangeJobConfig extends BaseMultiStepJobConfig<RiskDto, RiskEntity> { public class RiskImportRangeJobConfig extends BaseMultiStepJobConfig<RiskDto, RiskEntity> {
private final WebClient maritimeServiceApiWebClient; private final WebClient maritimeServiceApiWebClient;
private final RiskDataProcessor riskDataProcessor; private final RiskDataProcessor riskDataProcessor;
private final RiskDataWriter riskDataWriter; private final RiskDetailDataWriter riskDataWriter;
private final RiskDataRangeReader riskDataRangeReader; private final RiskDataRangeReader riskDataRangeReader;
private final JdbcTemplate jdbcTemplate; private final JdbcTemplate jdbcTemplate;
private final BatchDateService batchDateService; private final BatchDateService batchDateService;
@ -61,7 +61,7 @@ public class RiskImportRangeJobConfig extends BaseMultiStepJobConfig<RiskDto, Ri
JobRepository jobRepository, JobRepository jobRepository,
PlatformTransactionManager transactionManager, PlatformTransactionManager transactionManager,
RiskDataProcessor riskDataProcessor, RiskDataProcessor riskDataProcessor,
RiskDataWriter riskDataWriter, RiskDetailDataWriter riskDataWriter,
JdbcTemplate jdbcTemplate, JdbcTemplate jdbcTemplate,
@Qualifier("maritimeServiceApiWebClient")WebClient maritimeServiceApiWebClient, @Qualifier("maritimeServiceApiWebClient")WebClient maritimeServiceApiWebClient,
RiskDataRangeReader riskDataRangeReader, RiskDataRangeReader riskDataRangeReader,

파일 보기

@ -46,7 +46,7 @@ public class RiskDataRangeReader extends BaseApiReader<RiskDto> {
@Override @Override
protected String getApiPath() { protected String getApiPath() {
return "/RiskAndCompliance/UpdatedRiskList"; return "/RiskAndCompliance/UpdatedRiskWithNarrativesList";
} }
protected String getApiKey() { protected String getApiKey() {
return "RISK_IMPORT_API"; return "RISK_IMPORT_API";

파일 보기

@ -22,8 +22,6 @@ public class RiskRepositoryImpl extends BaseJdbcRepository<RiskEntity, Long> imp
@Value("${app.batch.target-schema.tables.risk-compliance-001}") @Value("${app.batch.target-schema.tables.risk-compliance-001}")
private String tableName; private String tableName;
@Value("${app.batch.target-schema.tables.risk-detail-001:tb_ship_risk_detail_info}")
private String riskDetailTableName;
public RiskRepositoryImpl(JdbcTemplate jdbcTemplate) { public RiskRepositoryImpl(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate); super(jdbcTemplate);
@ -233,7 +231,7 @@ public class RiskRepositoryImpl extends BaseJdbcRepository<RiskEntity, Long> imp
?, ?, -- 83-84: rss_sts ?, ?, -- 83-84: rss_sts
?, ? -- 85-86: job_execution_id, creatr_id ?, ? -- 85-86: job_execution_id, creatr_id
) )
""".formatted(targetSchema, riskDetailTableName); """.formatted(targetSchema, tableName);
} }
private void setRiskDetailParameters(PreparedStatement ps, RiskEntity entity) throws Exception { private void setRiskDetailParameters(PreparedStatement ps, RiskEntity entity) throws Exception {

파일 보기

@ -142,10 +142,9 @@ app:
movements-008: tb_ship_trnst_hstry movements-008: tb_ship_trnst_hstry
code-001: tb_ship_type_cd code-001: tb_ship_type_cd
code-002: tb_ship_country_cd code-002: tb_ship_country_cd
risk-compliance-001: tb_ship_risk_info risk-compliance-001: tb_ship_risk_detail_info
risk-compliance-002: tb_ship_compliance_info risk-compliance-002: tb_ship_compliance_info
risk-compliance-003: tb_company_compliance_info risk-compliance-003: tb_company_compliance_info
risk-detail-001: tb_ship_risk_detail_info
ship-028: ship_detail_hash_json ship-028: ship_detail_hash_json
imo-meta-001: tb_ship_default_info imo-meta-001: tb_ship_default_info
service-schema: service-schema: