From 02f0d0b079f7d5c20b6a2f0fa68dfa069b7f4d24 Mon Sep 17 00:00:00 2001 From: "fabio.formosa" Date: Mon, 14 Nov 2016 19:08:15 +0100 Subject: [PATCH] Moved all jobTrigger references to TriggerMonitor --- .../aspects/ProgressUpdaterImpl.java | 27 ++++++++++---- .../configuration/SchedulerConfig.java | 9 +++++ .../controllers/SchedulerController.java | 36 ++++++++++++++----- .../scheduler/TriggerMonitor.java | 11 ++++++ .../scheduler/TriggerMonitorImpl.java | 19 ++++++++++ 5 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitor.java create mode 100644 quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitorImpl.java diff --git a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java index 3316853..e7e7c73 100644 --- a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java +++ b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java @@ -2,15 +2,17 @@ package it.fabioformosa.quartzmanager.aspects; import javax.annotation.Resource; +import org.quartz.DailyTimeIntervalTrigger; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; -import org.quartz.impl.triggers.SimpleTriggerImpl; +import org.quartz.Trigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessageSendingOperations; import org.springframework.stereotype.Component; import it.fabioformosa.quartzmanager.dto.TriggerProgress; +import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor; //@Aspect @Component @@ -23,7 +25,7 @@ public class ProgressUpdaterImpl implements ProgressUpdater { private Scheduler scheduler; @Resource - private SimpleTrigger jobTrigger = null; + private TriggerMonitor triggerMonitor; //@AfterReturning("execution(* logAndSend(..))") // @Override @@ -33,15 +35,28 @@ public class ProgressUpdaterImpl implements ProgressUpdater { @Override public void update() throws SchedulerException { - SimpleTriggerImpl jobTrigger = (SimpleTriggerImpl) scheduler - .getTrigger(this.jobTrigger.getKey()); + Trigger trigger = scheduler.getTrigger(triggerMonitor.getTrigger().getKey()); + + int timesTriggered = 0; + int repeatCount = 0; + + if (trigger instanceof SimpleTrigger) { + SimpleTrigger simpleTrigger = (SimpleTrigger) trigger; + timesTriggered = simpleTrigger.getTimesTriggered(); + repeatCount = simpleTrigger.getRepeatCount(); + } else if (trigger instanceof DailyTimeIntervalTrigger) { + DailyTimeIntervalTrigger dailyTrigger = (DailyTimeIntervalTrigger) trigger; + timesTriggered = dailyTrigger.getTimesTriggered(); + repeatCount = dailyTrigger.getRepeatCount(); + } TriggerProgress progress = new TriggerProgress(); + Trigger jobTrigger = triggerMonitor.getTrigger(); if (jobTrigger != null && jobTrigger.getJobKey() != null) { progress.setJobKey(jobTrigger.getJobKey().getName()); progress.setJobClass(jobTrigger.getClass().getSimpleName()); - progress.setTimesTriggered(jobTrigger.getTimesTriggered()); - progress.setRepeatCount(jobTrigger.getRepeatCount() + 1); + progress.setTimesTriggered(timesTriggered); + progress.setRepeatCount(repeatCount + 1); progress.setFinalFireTime(jobTrigger.getFinalFireTime()); progress.setNextFireTime(jobTrigger.getNextFireTime()); progress.setPreviousFireTime(jobTrigger.getPreviousFireTime()); diff --git a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java index 024b548..5075c89 100644 --- a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java +++ b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/configuration/SchedulerConfig.java @@ -21,6 +21,8 @@ import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean; import it.fabioformosa.quartzmanager.jobs.SampleJob; import it.fabioformosa.quartzmanager.scheduler.AutowiringSpringBeanJobFactory; +import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor; +import it.fabioformosa.quartzmanager.scheduler.TriggerMonitorImpl; @Configuration @ConditionalOnProperty(name = "quartz.enabled") @@ -45,6 +47,13 @@ public class SchedulerConfig { return factoryBean; } + @Bean(name = "triggerMonitor") + public TriggerMonitor createTriggerMonitor(@Qualifier("jobTrigger") Trigger trigger) { + TriggerMonitor triggerMonitor = new TriggerMonitorImpl(); + triggerMonitor.setTrigger(trigger); + return triggerMonitor; + } + @Bean public JobDetailFactoryBean jobDetail() { return createJobDetail(SampleJob.class); diff --git a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java index dfbba49..a625ea5 100644 --- a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java +++ b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java @@ -2,6 +2,7 @@ package it.fabioformosa.quartzmanager.controllers; import javax.annotation.Resource; +import org.quartz.DailyTimeIntervalTrigger; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController; import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam; import it.fabioformosa.quartzmanager.dto.TriggerProgress; +import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor; @RestController @RequestMapping("/scheduler") @@ -32,8 +34,9 @@ public class SchedulerController { private Scheduler scheduler; @Resource - private SimpleTrigger jobTrigger = null; + private TriggerMonitor triggerMonitor; + @SuppressWarnings("unused") private long fromMillsIntervalToTriggerPerDay(long repeatIntervalInMills) { return (int) Math.ceil(MILLS_IN_A_DAY / repeatIntervalInMills); } @@ -42,7 +45,6 @@ public class SchedulerController { return (int) Math.ceil(Long.valueOf(MILLS_IN_A_DAY) / triggerPerDay); //with ceil the triggerPerDay is a max value } - @SuppressWarnings("unused") private int fromTriggerPerDayToSecInterval(long triggerPerDay) { return (int) Math.ceil(Long.valueOf(SEC_IN_A_DAY) / triggerPerDay); } @@ -50,16 +52,31 @@ public class SchedulerController { @RequestMapping(value = "/config", method = RequestMethod.GET) public SchedulerConfigParam getConfig() { SchedulerConfigParam config = new SchedulerConfigParam(); - config.setMaxCount(jobTrigger.getRepeatCount() + 1); - long repeatIntervalInMills = jobTrigger.getRepeatInterval(); - config.setTriggerPerDay(fromMillsIntervalToTriggerPerDay(repeatIntervalInMills)); + + int maxCount = 0; + long repeatIntervalInMills = 0; + if (triggerMonitor.getTrigger() instanceof SimpleTrigger) { + SimpleTrigger simpleTrigger = (SimpleTrigger) triggerMonitor.getTrigger(); + maxCount = simpleTrigger.getRepeatCount() + 1; + repeatIntervalInMills = fromTriggerPerDayToMillSecInterval(simpleTrigger.getRepeatInterval()); + } else if (triggerMonitor.getTrigger() instanceof DailyTimeIntervalTrigger) { + DailyTimeIntervalTrigger dailyTimeIntervalTrigger = (DailyTimeIntervalTrigger) triggerMonitor + .getTrigger(); + maxCount = dailyTimeIntervalTrigger.getRepeatCount() + 1; + repeatIntervalInMills = fromTriggerPerDayToSecInterval( + dailyTimeIntervalTrigger.getRepeatInterval()); + } + + config.setMaxCount(maxCount); + config.setTriggerPerDay(repeatIntervalInMills); return config; } @RequestMapping("/progress") public TriggerProgress getProgressInfo() throws SchedulerException { - SimpleTriggerImpl jobTrigger = ((SimpleTriggerImpl) scheduler.getTrigger(this.jobTrigger.getKey())); + SimpleTriggerImpl jobTrigger = ((SimpleTriggerImpl) scheduler + .getTrigger(triggerMonitor.getTrigger().getKey())); TriggerProgress progress = new TriggerProgress(); if (jobTrigger != null && jobTrigger.getJobKey() != null) { @@ -83,15 +100,16 @@ public class SchedulerController { public SchedulerConfigParam postConfig(@RequestBody SchedulerConfigParam config) throws SchedulerException { - TriggerBuilder triggerBuilder = jobTrigger.getTriggerBuilder(); + SimpleTrigger trigger = (SimpleTrigger) triggerMonitor.getTrigger(); + TriggerBuilder triggerBuilder = trigger.getTriggerBuilder(); int intervalInSeconds = fromTriggerPerDayToMillSecInterval(config.getTriggerPerDay()); Trigger newTrigger = triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(intervalInSeconds).withRepeatCount(config.getMaxCount() - 1)) .build(); - scheduler.rescheduleJob(jobTrigger.getKey(), newTrigger); - jobTrigger = (SimpleTrigger) newTrigger; + scheduler.rescheduleJob(triggerMonitor.getTrigger().getKey(), newTrigger); + triggerMonitor.setTrigger(newTrigger); return config; } diff --git a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitor.java b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitor.java new file mode 100644 index 0000000..cb0e62b --- /dev/null +++ b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitor.java @@ -0,0 +1,11 @@ +package it.fabioformosa.quartzmanager.scheduler; + +import org.quartz.Trigger; + +public interface TriggerMonitor { + + void setTrigger(Trigger trigger); + + Trigger getTrigger(); + +} diff --git a/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitorImpl.java b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitorImpl.java new file mode 100644 index 0000000..1e352ba --- /dev/null +++ b/quartz-manager/src/main/java/it/fabioformosa/quartzmanager/scheduler/TriggerMonitorImpl.java @@ -0,0 +1,19 @@ +package it.fabioformosa.quartzmanager.scheduler; + +import org.quartz.Trigger; + +public class TriggerMonitorImpl implements TriggerMonitor { + + private Trigger trigger; + + @Override + public Trigger getTrigger() { + return trigger; + } + + @Override + public void setTrigger(Trigger trigger) { + this.trigger = trigger; + } + +}