From bc478ad4edfa6426a2ab7f43332b2537e98ca5e9 Mon Sep 17 00:00:00 2001 From: eastargh Date: Wed, 17 Jun 2026 10:58:00 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B0=EC=B9=98=EC=9E=A1=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=8B=9C=20clustered=EC=97=90=20=EB=AC=B4=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80=EB=90=98=EB=8A=94=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rms/common/scheduler/EMSScheduler.java | 2 ++ .../common/scheduler/EMSSchedulerImpl.java | 26 ++++++++++++++++++ .../scheduler/SchedulerManController.java | 10 ++++++- .../controller/SchedulerReloadController.java | 27 +++++++++---------- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/common/scheduler/EMSScheduler.java b/src/main/java/com/eactive/eai/rms/common/scheduler/EMSScheduler.java index 5cf94b2..f5a5ee9 100644 --- a/src/main/java/com/eactive/eai/rms/common/scheduler/EMSScheduler.java +++ b/src/main/java/com/eactive/eai/rms/common/scheduler/EMSScheduler.java @@ -15,4 +15,6 @@ public interface EMSScheduler { void deleteAndAddJob(Scheduler scheduler, String jobName) throws SchedulerException, ClassNotFoundException; + void reloadJob(String jobName) throws SchedulerException, ClassNotFoundException; + } diff --git a/src/main/java/com/eactive/eai/rms/common/scheduler/EMSSchedulerImpl.java b/src/main/java/com/eactive/eai/rms/common/scheduler/EMSSchedulerImpl.java index 2819ba2..8e58f77 100644 --- a/src/main/java/com/eactive/eai/rms/common/scheduler/EMSSchedulerImpl.java +++ b/src/main/java/com/eactive/eai/rms/common/scheduler/EMSSchedulerImpl.java @@ -120,6 +120,32 @@ public class EMSSchedulerImpl implements EMSScheduler { } } + @Override + public void reloadJob(String jobName) throws SchedulerException, ClassNotFoundException { + JobInfo jobInfo = jobInfoService.getById(jobName); + if (CLUSTERED.equals(jobInfo.getInstanceName())) { + reloadClusteredJob(jobInfo); + } else { + deleteAndAddJob(scheduler, jobInfo); + deleteJob(clusteredScheduler, jobName); + } + } + + private void reloadClusteredJob(JobInfo jobInfo) throws SchedulerException, ClassNotFoundException { + TriggerKey triggerKey = new TriggerKey(getTriggerName(jobInfo.getId()), Scheduler.DEFAULT_GROUP); + Trigger existing = clusteredScheduler.getTrigger(triggerKey); + if (existing != null) { + CronTrigger newTrigger = newTrigger() + .withIdentity(triggerKey) + .withSchedule(cronSchedule(jobInfo.getCronExp())) + .build(); + Date ft = clusteredScheduler.rescheduleJob(triggerKey, newTrigger); + log.info("{} rescheduled at: {} cron: {}", jobInfo.getId(), ft, jobInfo.getCronExp()); + } else { + deleteAndAddJob(clusteredScheduler, jobInfo); + } + } + public void deleteJob(Scheduler inScheduler, String jobNm) throws SchedulerException { JobKey key = new JobKey(jobNm, Scheduler.DEFAULT_GROUP); JobDetail jobDetail = inScheduler.getJobDetail(key); diff --git a/src/main/java/com/eactive/eai/rms/common/scheduler/SchedulerManController.java b/src/main/java/com/eactive/eai/rms/common/scheduler/SchedulerManController.java index 57ec95b..b48d0a7 100644 --- a/src/main/java/com/eactive/eai/rms/common/scheduler/SchedulerManController.java +++ b/src/main/java/com/eactive/eai/rms/common/scheduler/SchedulerManController.java @@ -45,6 +45,9 @@ public class SchedulerManController extends BaseAnnotationController { @Qualifier("monitoringSyncAgent") private MonitoringSyncAgent monitoringSyncAgent; + @Autowired + private EMSScheduler emsScheduler; + @GetMapping(value = "/common/scheduler/schedulerMan.view") public String viewList() { return "/common/scheduler/schedulerMan"; @@ -96,6 +99,11 @@ public class SchedulerManController extends BaseAnnotationController { @PostMapping(value = "/common/scheduler/schedulerMan.json", params = "cmd=UPDATE") public ResponseEntity update(JobInfoUI jobInfoUI) { service.update(jobInfoUI); + try { + emsScheduler.reloadJob(jobInfoUI.getId()); + } catch (Exception e) { + logger.error("reloadJob error on current server", e); + } syncReloadScheduler(jobInfoUI.getId()); return ResponseEntity.ok().build(); } @@ -115,7 +123,7 @@ public class SchedulerManController extends BaseAnnotationController { String url = "/monitoring/schedulerReload.do"; try { - ret = monitoringSyncAgent.sync(url, paramMap); + ret = monitoringSyncAgent.targetSync(url, paramMap); } catch (Exception e) { logger.error("syncReloadScheduler error", e); } finally { diff --git a/src/main/java/com/eactive/eai/rms/onl/common/controller/SchedulerReloadController.java b/src/main/java/com/eactive/eai/rms/onl/common/controller/SchedulerReloadController.java index 335db18..88dd56b 100644 --- a/src/main/java/com/eactive/eai/rms/onl/common/controller/SchedulerReloadController.java +++ b/src/main/java/com/eactive/eai/rms/onl/common/controller/SchedulerReloadController.java @@ -1,10 +1,10 @@ package com.eactive.eai.rms.onl.common.controller; -import com.eactive.eai.rms.common.interceptor.InterceptorSkipController; -import com.eactive.eai.rms.common.scheduler.EMSScheduler; -import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.AdapterJobInfo; -import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.AdapterSchedulerUtil; -import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.SpcfTmAdapterDao; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + import org.quartz.Scheduler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,9 +15,11 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; -import java.util.Map; +import com.eactive.eai.rms.common.interceptor.InterceptorSkipController; +import com.eactive.eai.rms.common.scheduler.EMSScheduler; +import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.AdapterJobInfo; +import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.AdapterSchedulerUtil; +import com.eactive.eai.rms.onl.manage.adapter.spcftmadapter.SpcfTmAdapterDao; @Controller public class SchedulerReloadController implements InterceptorSkipController { @@ -34,19 +36,14 @@ public class SchedulerReloadController implements InterceptorSkipController { private EMSScheduler emsScheduler; @Autowired - @Qualifier("scheduler") + @Qualifier("scheduler") private Scheduler scheduler; - @Autowired - @Qualifier("clusteredScheduler") - private Scheduler clusteredScheduler; - @RequestMapping("/schedulerReload.do") public ResponseEntity> rmsSchedulerReload(String jobName) { Map result = new HashMap<>(); try { - emsScheduler.deleteAndAddJob(scheduler, jobName); - emsScheduler.deleteAndAddJob(clusteredScheduler, jobName); + emsScheduler.reloadJob(jobName); result.put("status", "success"); } catch (Exception e) { logger.error("", e);