배치잡 기본에서 클러스터로 수정시 next fire time =null인 버그 수정
eapim-admin CI / build (push) Has been cancelled

This commit is contained in:
eastargh
2026-06-18 11:05:26 +09:00
parent 02072df973
commit af63b1a256
2 changed files with 3 additions and 19 deletions
@@ -57,7 +57,7 @@ public class ClusteredSchedulerConfig {
quartzProperties.put("org.quartz.jobStore.misfireThreshold", "60000"); quartzProperties.put("org.quartz.jobStore.misfireThreshold", "60000");
quartzProperties.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); quartzProperties.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
quartzProperties.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); quartzProperties.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
quartzProperties.put("org.quartz.jobStore.useProperties", "false"); quartzProperties.put("org.quartz.jobStore.useProperties", "false");
quartzProperties.put("org.quartz.jobStore.dataSource", monitoringSchema); quartzProperties.put("org.quartz.jobStore.dataSource", monitoringSchema);
quartzProperties.put("org.quartz.jobStore.tablePrefix", monitoringSchema + ".QRTZ_"); quartzProperties.put("org.quartz.jobStore.tablePrefix", monitoringSchema + ".QRTZ_");
@@ -139,9 +139,6 @@ public class EMSSchedulerImpl implements EMSScheduler {
Trigger existing = clusteredScheduler.getTrigger(triggerKey); Trigger existing = clusteredScheduler.getTrigger(triggerKey);
JobDetail existingJob = clusteredScheduler.getJobDetail(jobKey); JobDetail existingJob = clusteredScheduler.getJobDetail(jobKey);
log.info("[reloadClusteredJob] {} - existingTrigger={}, existingJob={}", jobId,
existing != null ? existing.getKey() : "null",
existingJob != null ? existingJob.getKey() : "null");
if (existing != null && existingJob != null) { if (existing != null && existingJob != null) {
CronTrigger newTrigger = newTrigger() CronTrigger newTrigger = newTrigger()
@@ -150,7 +147,6 @@ public class EMSSchedulerImpl implements EMSScheduler {
.build(); .build();
Date ft = clusteredScheduler.rescheduleJob(triggerKey, newTrigger); Date ft = clusteredScheduler.rescheduleJob(triggerKey, newTrigger);
if (ft != null) { if (ft != null) {
log.info("[reloadClusteredJob] {} rescheduled at: {} cron: {}", jobId, ft, jobInfo.getCronExp());
return; return;
} }
log.warn("[reloadClusteredJob] {} rescheduleJob returned null, falling back to deleteAndAddJob", jobId); log.warn("[reloadClusteredJob] {} rescheduleJob returned null, falling back to deleteAndAddJob", jobId);
@@ -159,7 +155,6 @@ public class EMSSchedulerImpl implements EMSScheduler {
log.warn("[reloadClusteredJob] {} has orphaned trigger without job, unscheduling", jobId); log.warn("[reloadClusteredJob] {} has orphaned trigger without job, unscheduling", jobId);
clusteredScheduler.unscheduleJob(triggerKey); clusteredScheduler.unscheduleJob(triggerKey);
} }
log.info("[reloadClusteredJob] {} calling deleteAndAddJob on clusteredScheduler", jobId);
deleteAndAddJob(clusteredScheduler, jobInfo); deleteAndAddJob(clusteredScheduler, jobInfo);
} }
@@ -167,10 +162,8 @@ public class EMSSchedulerImpl implements EMSScheduler {
String schedulerType = (inScheduler == clusteredScheduler) ? "clusteredScheduler" : "scheduler"; String schedulerType = (inScheduler == clusteredScheduler) ? "clusteredScheduler" : "scheduler";
JobKey key = new JobKey(jobNm, Scheduler.DEFAULT_GROUP); JobKey key = new JobKey(jobNm, Scheduler.DEFAULT_GROUP);
JobDetail jobDetail = inScheduler.getJobDetail(key); JobDetail jobDetail = inScheduler.getJobDetail(key);
log.info("[deleteJob] {} from {} — found={}", jobNm, schedulerType, jobDetail != null);
if (jobDetail != null) { if (jobDetail != null) {
inScheduler.deleteJob(key); inScheduler.deleteJob(key);
log.info("[deleteJob] {} deleted from {}", jobNm, schedulerType);
} }
} }
@@ -179,12 +172,8 @@ public class EMSSchedulerImpl implements EMSScheduler {
if (StringUtils.equalsIgnoreCase(info.getUseYn(), "Y") if (StringUtils.equalsIgnoreCase(info.getUseYn(), "Y")
&& StringUtils.equalsAnyIgnoreCase(info.getInstanceName(), "ALL", "CLUSTERED", ContainerUtil.getInstanceName())) { && StringUtils.equalsAnyIgnoreCase(info.getInstanceName(), "ALL", "CLUSTERED", ContainerUtil.getInstanceName())) {
String schedulerType = (inScheduler == clusteredScheduler) ? "clusteredScheduler" : "scheduler";
log.info("[addJob] {} → {}, class={}, cron={}", info.getId(), schedulerType, info.getJobClassName(), info.getCronExp());
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Class<Job> jobClass = (Class<Job>) Class.forName(info.getJobClassName()); Class<Job> jobClass = (Class<Job>) Class.forName(info.getJobClassName());
log.info("[addJob] {} class loaded: {}", info.getId(), jobClass.getName());
JobBuilder jobBuilder = newJob(jobClass); JobBuilder jobBuilder = newJob(jobClass);
jobBuilder = jobBuilder.withIdentity(info.getId(), Scheduler.DEFAULT_GROUP); jobBuilder = jobBuilder.withIdentity(info.getId(), Scheduler.DEFAULT_GROUP);
@@ -200,13 +189,8 @@ public class EMSSchedulerImpl implements EMSScheduler {
.withSchedule(cronSchedule(info.getCronExp())) .withSchedule(cronSchedule(info.getCronExp()))
.build(); .build();
log.info("[addJob] {} calling scheduleJob...", info.getId()); inScheduler.scheduleJob(job, trigger);
Date ft = inScheduler.scheduleJob(job, trigger); }
log.info("[addJob] {} scheduled at: {} cron: {}", job.getKey(), ft, trigger.getCronExpression());
} else {
log.info("[addJob] {} skipped — useYn={}, instanceName={}, currentInstance={}",
info.getId(), info.getUseYn(), info.getInstanceName(), ContainerUtil.getInstanceName());
}
} }
} }