- aisTargetImportJob: S&P Global AIS API 연동 (매 분 15초) - AIS Target 조회 API (MMSI/시간/공간/폴리곤/WKT 검색) - 항해 조건 필터 검색 API (SOG/COG/Heading/Destination/Status) - Caffeine 캐시 적용 (TTL 120분, 최대 30만건) - partitionManagerJob: 매일 1회 일별,월별 파티션 자동 생성 [개선] - API context-path: /snp-api로 변경 (다른 API 서비스의 Proxy 설정 충돌 방지) - BaseApiReader 상태 초기화 로직 추가 (재실행 시 0건 버그 수정) - logback-spring.xml: 로그 파일 분리 및 롤링 정책 적용
51 lines
1.3 KiB
Java
51 lines
1.3 KiB
Java
package com.snp.batch.global.partition;
|
|
|
|
import lombok.Getter;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 파티션 관리 대상 테이블 설정
|
|
*
|
|
* Daily 파티션: 매일 실행
|
|
* Monthly 파티션: 매월 말일에만 실행
|
|
*/
|
|
@Getter
|
|
@Component
|
|
public class PartitionConfig {
|
|
|
|
/**
|
|
* Daily 파티션 대상 테이블 (파티션 네이밍: {table}_YYYY_MM_DD)
|
|
*/
|
|
private final List<PartitionTableInfo> dailyPartitionTables = List.of(
|
|
// 추후 daily 파티션 테이블 추가
|
|
);
|
|
|
|
/**
|
|
* Monthly 파티션 대상 테이블 (파티션 네이밍: {table}_YYYY_MM)
|
|
*/
|
|
private final List<PartitionTableInfo> monthlyPartitionTables = List.of(
|
|
new PartitionTableInfo(
|
|
"snp_data",
|
|
"ais_target",
|
|
"message_timestamp",
|
|
2 // 미리 생성할 개월 수
|
|
)
|
|
);
|
|
|
|
/**
|
|
* 파티션 테이블 정보
|
|
*/
|
|
public record PartitionTableInfo(
|
|
String schema,
|
|
String tableName,
|
|
String partitionColumn,
|
|
int periodsAhead // 미리 생성할 기간 수 (daily: 일, monthly: 월)
|
|
) {
|
|
public String getFullTableName() {
|
|
return schema + "." + tableName;
|
|
}
|
|
}
|
|
}
|