KjbProperty 재로딩 지원
This commit is contained in:
@@ -47,6 +47,7 @@ public class UmsDispatchService {
|
|||||||
private KjbUmsService kjbUmsService;
|
private KjbUmsService kjbUmsService;
|
||||||
private KjbEmailSendModule kjbEmailSendModule;
|
private KjbEmailSendModule kjbEmailSendModule;
|
||||||
private final KjbPropertyInjector kjbPropertyInjector;
|
private final KjbPropertyInjector kjbPropertyInjector;
|
||||||
|
private KjbProperty kjbProperty;
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -73,23 +74,47 @@ public class UmsDispatchService {
|
|||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
KjbProperty prop = kjbPropertyInjector.inject(new KjbProperty());
|
this.kjbProperty = kjbPropertyInjector.inject(new KjbProperty());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.kjbUmsService = new KjbUmsService(prop);
|
this.kjbUmsService = new KjbUmsService(kjbProperty);
|
||||||
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(prop, messageRequestRepository);
|
this.kjbEmailSendModule = KjbEmailSendModule.getInstance(kjbProperty, messageRequestRepository);
|
||||||
log.info("KjbUmsService and KjbEmailSendModule initialized successfully");
|
log.info("KjbUmsService and KjbEmailSendModule initialized successfully");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to initialize KjbUmsService or KjbEmailSendModule: {}", e.getMessage(), 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")
|
@SuppressWarnings("unchecked")
|
||||||
@Transactional(transactionManager = "transactionManagerForEMS")
|
@Transactional(transactionManager = "transactionManagerForEMS")
|
||||||
public void processMessages() {
|
public void processMessages() {
|
||||||
log.info("Starting to process pending messages");
|
log.info("Starting to process pending messages");
|
||||||
|
|
||||||
// 상태가 PENDING인 메시지들을 조회하고 바로 PROCESSING으로 변경
|
// URL 설정값이 비어있을 경우 DB에서 재로딩 시도
|
||||||
|
reloadPropertyIfNeeded();
|
||||||
|
|
||||||
|
// 상태가 PENDING인 메시지들을 조회하고 바로 PROCESSING으로 변경
|
||||||
List<MessageRequest> pendingMessages = entityManager.createQuery(
|
List<MessageRequest> pendingMessages = entityManager.createQuery(
|
||||||
"SELECT m FROM MessageRequest m WHERE m.requestStatus = :status " +
|
"SELECT m FROM MessageRequest m WHERE m.requestStatus = :status " +
|
||||||
"ORDER BY m.requestDate ASC")
|
"ORDER BY m.requestDate ASC")
|
||||||
|
|||||||
@@ -19,6 +19,48 @@ public class KjbPropertyInjector {
|
|||||||
this.groupId = groupId;
|
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) {
|
public <T> T inject(T property) {
|
||||||
Class<?> clazz = property.getClass();
|
Class<?> clazz = property.getClass();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user