|
@@ -0,0 +1,90 @@
|
|
|
+package com.xxl.quartz;
|
|
|
+
|
|
|
+import org.quartz.*;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.InitializingBean;
|
|
|
+import org.springframework.util.Assert;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+public final class DynamicSchedulerUtil implements InitializingBean {
|
|
|
+ private static final Logger logger = LoggerFactory.getLogger(DynamicSchedulerUtil.class);
|
|
|
+
|
|
|
+ // Scheduler
|
|
|
+ private static Scheduler scheduler;
|
|
|
+ public static void setScheduler(Scheduler scheduler) {
|
|
|
+ DynamicSchedulerUtil.scheduler = scheduler;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterPropertiesSet() throws Exception {
|
|
|
+ Assert.notNull(scheduler, "quartz scheduler is null");
|
|
|
+ logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Add 新增
|
|
|
+ public static boolean addJob(JobModel job) throws SchedulerException {
|
|
|
+ final TriggerKey triggerKey = job.getTriggerKey();
|
|
|
+ if (scheduler.checkExists(triggerKey)) {
|
|
|
+ final Trigger trigger = scheduler.getTrigger(triggerKey);
|
|
|
+ logger.info(">>>>>>>>> Already exist trigger [" + trigger + "] by key [" + triggerKey + "] in Scheduler");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ final CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
|
|
|
+ final CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey)
|
|
|
+ .withSchedule(cronScheduleBuilder)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ final JobDetail jobDetail = job.getJobDetail();
|
|
|
+ final Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
|
|
|
+
|
|
|
+ logger.debug("Register DynamicJob {} on [{}]", job, date);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Pause 暂停-指定Job
|
|
|
+ public static boolean pauseJob(JobModel existJob) throws SchedulerException {
|
|
|
+ final TriggerKey triggerKey = existJob.getTriggerKey();
|
|
|
+ boolean result = false;
|
|
|
+ if (scheduler.checkExists(triggerKey)) {
|
|
|
+ scheduler.pauseTrigger(triggerKey);
|
|
|
+ result = true;
|
|
|
+ logger.debug("Pause exist DynamicJob {}, triggerKey [{}] successful", existJob, triggerKey);
|
|
|
+ } else {
|
|
|
+ logger.debug("Failed pause exist DynamicJob {}, because not fount triggerKey [{}]", existJob, triggerKey);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Resume 重启-指定Job
|
|
|
+ public static boolean resumeJob(JobModel existJob) throws SchedulerException {
|
|
|
+ final TriggerKey triggerKey = existJob.getTriggerKey();
|
|
|
+ boolean result = false;
|
|
|
+ if (scheduler.checkExists(triggerKey)) {
|
|
|
+ final CronTrigger newTrigger = existJob.cronTrigger();
|
|
|
+ final Date date = scheduler.rescheduleJob(triggerKey, newTrigger);
|
|
|
+
|
|
|
+ result = true;
|
|
|
+ logger.debug("Resume exist DynamicJob {}, triggerKey [{}] on [{}] successful", existJob, triggerKey, date);
|
|
|
+ } else {
|
|
|
+ logger.debug("Failed resume exist DynamicJob {}, because not fount triggerKey [{}]", existJob, triggerKey);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Remove exists job 移除-指定Job
|
|
|
+ public static boolean removeJob(JobModel existJob) throws SchedulerException {
|
|
|
+ final TriggerKey triggerKey = existJob.getTriggerKey();
|
|
|
+ boolean result = false;
|
|
|
+ if (scheduler.checkExists(triggerKey)) {
|
|
|
+ result = scheduler.unscheduleJob(triggerKey);
|
|
|
+ }
|
|
|
+
|
|
|
+ logger.debug("Remove DynamicJob {} result [{}]", existJob, result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|