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