KjbProperty 재로딩 지원

This commit is contained in:
Rinjae
2025-12-10 21:48:19 +09:00
parent adf1fd63fb
commit 962e54ec93
2 changed files with 71 additions and 4 deletions
@@ -47,6 +47,7 @@ public class UmsDispatchService {
private KjbUmsService kjbUmsService;
private KjbEmailSendModule kjbEmailSendModule;
private final KjbPropertyInjector kjbPropertyInjector;
private KjbProperty kjbProperty;
@Autowired
@@ -73,23 +74,47 @@ public class UmsDispatchService {
@PostConstruct
public void init() {
KjbProperty prop = kjbPropertyInjector.inject(new KjbProperty());
this.kjbProperty = kjbPropertyInjector.inject(new KjbProperty());
try {
this.kjbUmsService = new KjbUmsService(prop);
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(prop, messageRequestRepository);
this.kjbUmsService = new KjbUmsService(kjbProperty);
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(kjbProperty, messageRequestRepository);
log.info("KjbUmsService and KjbEmailSendModule initialized successfully");
} catch (Exception e) {
log.error("Failed to initialize KjbUmsService or KjbEmailSendModule: {}", e.getMessage(), e);
}
}
/**
* URL 설정값이 비어있을 경우 DB에서 재로딩 후 서비스 재초기화
*/
private void reloadPropertyIfNeeded() {
if (!kjbPropertyInjector.isUrlConfigured(kjbProperty)) {
log.info("KjbProperty URL 값이 비어있어 재로딩 시도");
KjbProperty reloaded = kjbPropertyInjector.reloadIfUrlEmpty(kjbProperty);
if (reloaded != kjbProperty && kjbPropertyInjector.isUrlConfigured(reloaded)) {
this.kjbProperty = reloaded;
try {
this.kjbUmsService = new KjbUmsService(kjbProperty);
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(kjbProperty, messageRequestRepository);
log.info("KjbProperty 재로딩 후 서비스 재초기화 완료");
} catch (Exception e) {
log.error("KjbProperty 재로딩 후 서비스 재초기화 실패: {}", e.getMessage(), e);
}
}
}
}
@SuppressWarnings("unchecked")
@Transactional(transactionManager = "transactionManagerForEMS")
public void processMessages() {
log.info("Starting to process pending messages");
// 상태가 PENDING인 메시지들을 조회하고 바로 PROCESSING으로 변경
// URL 설정값이 비어있을 경우 DB에서 재로딩 시도
reloadPropertyIfNeeded();
// 상태가 PENDING인 메시지들을 조회하고 바로 PROCESSING으로 변경
List<MessageRequest> pendingMessages = entityManager.createQuery(
"SELECT m FROM MessageRequest m WHERE m.requestStatus = :status " +
"ORDER BY m.requestDate ASC")
@@ -19,6 +19,48 @@ public class KjbPropertyInjector {
this.groupId = groupId;
}
/**
* KjbProperty의 URL 값들이 설정되어 있는지 확인
* @param property 검사할 KjbProperty 객체
* @return URL 값들이 모두 설정되어 있으면 true
*/
public boolean isUrlConfigured(KjbProperty property) {
if (property == null) return false;
// 주요 URL 값들 중 하나라도 설정되어 있으면 true
return StringUtils.isNotEmpty(property.getEaiBatchUrl())
|| StringUtils.isNotEmpty(property.getUmsHostUrl())
|| StringUtils.isNotEmpty(property.getObpUrl());
}
/**
* URL 값이 비어있을 경우 DB에서 재로딩 시도
* @param property 기존 KjbProperty 객체
* @return 재로딩된 KjbProperty 객체 (재로딩 실패 시 기존 객체 반환)
*/
public KjbProperty reloadIfUrlEmpty(KjbProperty property) {
if (property == null) {
return inject(new KjbProperty());
}
if (!isUrlConfigured(property)) {
log.info("KjbProperty URL 값이 비어있어 DB에서 재로딩 시도");
try {
KjbProperty reloaded = inject(new KjbProperty());
if (isUrlConfigured(reloaded)) {
log.info("KjbProperty 재로딩 성공");
return reloaded;
} else {
log.warn("KjbProperty 재로딩 후에도 URL 값이 비어있음");
}
} catch (Exception e) {
log.error("KjbProperty 재로딩 실패: {}", e.getMessage(), e);
}
}
return property;
}
public <T> T inject(T property) {
Class<?> clazz = property.getClass();