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")