feat : setinfo 조회할때 cp ep 디비 존재할수도 있고 없을수도 있음. 히카리 커넥션, 조회 스킵 로직 추가, setinfo 조회 분리
parent
e51d3d58de
commit
38a67b7763
@ -0,0 +1,111 @@
|
||||
package com.worker.scheduler.smg.service;
|
||||
|
||||
|
||||
import com.worker.domain.entity.CpBdong;
|
||||
import com.worker.domain.entity.CpSetinfo;
|
||||
import com.worker.domain.entity.CpSetinfoId;
|
||||
import com.worker.domain.repo.cp.CpBdongRepository;
|
||||
import com.worker.domain.repo.cp.CpSetinfoRepository;
|
||||
import com.worker.domain.repo.ep.EpBdongRepository;
|
||||
import com.worker.domain.repo.ep.EpSetinfoRepository;
|
||||
import com.worker.scheduler.smg.dto.SinmungoDto;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SetInfoService {
|
||||
|
||||
private final Environment env;
|
||||
|
||||
// CP
|
||||
private final CpSetinfoRepository cpSetinfoRepository;
|
||||
private final CpBdongRepository cpBdongRepository;
|
||||
@Qualifier("cpDataSource")
|
||||
private final DataSource cpDataSource;
|
||||
|
||||
// EP
|
||||
private final EpSetinfoRepository epSetinfoRepository;
|
||||
private final EpBdongRepository epBdongRepository;
|
||||
@Qualifier("epDataSource")
|
||||
private final DataSource epDataSource;
|
||||
|
||||
public SinmungoDto.SetInfo findSetInfo() {
|
||||
// 공통 ID 빌더
|
||||
CpSetinfoId cpId = CpSetinfoId.builder()
|
||||
.codeName(env.getProperty("esb.info.cp.codeName"))
|
||||
.groupCode(env.getProperty("esb.info.cp.groupCode"))
|
||||
.detailCode(env.getProperty("esb.info.cp.detailCode"))
|
||||
.build();
|
||||
|
||||
CpSetinfoId epId = CpSetinfoId.builder()
|
||||
.codeName(env.getProperty("esb.info.ep.codeName"))
|
||||
.groupCode(env.getProperty("esb.info.ep.groupCode"))
|
||||
.detailCode(env.getProperty("esb.info.ep.detailCode"))
|
||||
.build();
|
||||
|
||||
// CP 쪽
|
||||
CpSetinfo cpSetinfo = null;
|
||||
List<CpBdong> cpBdongList = Collections.emptyList();
|
||||
if (isDsAvailable(cpDataSource)) {
|
||||
try {
|
||||
cpSetinfo = cpSetinfoRepository.findById(cpId).orElse(null);
|
||||
cpBdongList = safeList(cpBdongRepository::findAll);
|
||||
} catch (Exception e) {
|
||||
log.warn("[CP] 조회 실패. CP는 스킵: {}", e.getMessage());
|
||||
}
|
||||
} else {
|
||||
log.info("[CP] DB 비가용. CP 스킵.");
|
||||
}
|
||||
|
||||
// EP 쪽
|
||||
CpSetinfo epSetinfo = null;
|
||||
List<CpBdong> epBdongList = Collections.emptyList();
|
||||
if (isDsAvailable(epDataSource)) {
|
||||
try {
|
||||
epSetinfo = epSetinfoRepository.findById(epId).orElse(null);
|
||||
epBdongList = safeList(epBdongRepository::findAll);
|
||||
} catch (Exception e) {
|
||||
log.warn("[EP] 조회 실패. EP 스킵: {}", e.getMessage());
|
||||
}
|
||||
} else {
|
||||
log.info("[EP] DB 비가용. EP 스킵.");
|
||||
}
|
||||
|
||||
return SinmungoDto.SetInfo.builder()
|
||||
.cpSetinfo(cpSetinfo) // 없으면 null
|
||||
.epSetinfo(epSetinfo) // 없으면 null
|
||||
.cpBdongList(cpBdongList) // 없으면 empty
|
||||
.epBdongList(epBdongList) // 없으면 empty
|
||||
.build();
|
||||
}
|
||||
|
||||
private boolean isDsAvailable(DataSource ds) {
|
||||
if (ds == null) return false; // 데이터소스 빈 자체가 없을 수도 있음
|
||||
try (Connection c = ds.getConnection()) {
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 레포 호출을 안전하게 감싸 빈 리스트로 대체
|
||||
private <T> List<T> safeList(Supplier<List<T>> supplier) {
|
||||
try {
|
||||
List<T> list = supplier.get();
|
||||
return list != null ? list : Collections.emptyList();
|
||||
} catch (Exception e) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue