mirror of
https://github.com/fabioformosa/quartz-manager.git
synced 2026-01-03 16:13:20 +09:00
Moved all jobTrigger references to TriggerMonitor
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<SimpleTrigger> triggerBuilder = jobTrigger.getTriggerBuilder();
|
||||
SimpleTrigger trigger = (SimpleTrigger) triggerMonitor.getTrigger();
|
||||
TriggerBuilder<SimpleTrigger> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package it.fabioformosa.quartzmanager.scheduler;
|
||||
|
||||
import org.quartz.Trigger;
|
||||
|
||||
public interface TriggerMonitor {
|
||||
|
||||
void setTrigger(Trigger trigger);
|
||||
|
||||
Trigger getTrigger();
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user