diff --git a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java index 5b30d91..4a42c9c 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/service/ums/UmsDispatchService.java @@ -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 pendingMessages = entityManager.createQuery( "SELECT m FROM MessageRequest m WHERE m.requestStatus = :status " + "ORDER BY m.requestDate ASC") diff --git a/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java b/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java index d0074e5..9173847 100644 --- a/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java +++ b/src/main/java/com/eactive/ext/kjb/util/KjbPropertyInjector.java @@ -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 inject(T property) { Class clazz = property.getClass();