admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/job/QuartzManager.java
@@ -1,196 +1,196 @@
package com.yeshi.fanli.job;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Component;
import com.yeshi.fanli.log.LogHelper;
@Component
public class QuartzManager {
   private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
   private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
   /**
    *  创建任务:使用默认 任务组、定时组名
    * @param sched
    * @param jobName
    * @param time
    * @param params
    * @param cls
    */
   public static void addJob(Scheduler sched, Class <? extends Job> jobClass, String jobName,
         String time, Object obj) {
      try {
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null) {
            LogHelper.test("------addJob---任务创建-----" + jobName + "------- ");
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, JOB_GROUP_NAME).build();
            if (obj != null) {
               jobDetail.getJobDataMap().put("key", obj);
            }
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            trigger = TriggerBuilder.newTrigger().withIdentity(jobName, TRIGGER_GROUP_NAME)
                  .withSchedule(scheduleBuilder).build();
            sched.scheduleJob(jobDetail, trigger);
         }
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * 修改任务
    *
    * @param sched
    * @param jobName
    * @param jobGroupName
    * @param triggerName
    * @param triggerGroupName
    * @param time
    * @param params
    * @param cls
    */
   public static void modifyJob(Scheduler sched, Class <? extends Job> jobClass, String jobName,
          String time, Object obj) {
      try {
         LogHelper.test("------modifyJob---任务修改-----" + jobName + "------- ");
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null)
            return;
         // 删除原任务
         removeJob(sched, jobName);
         // 新建任务
         addJob(sched, jobClass, jobName, time, obj);
      } catch (Exception e) {
         e.printStackTrace();
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description: 修改一个任务的触发时间
    *
    * @param sched
    *            调度器 *
    * @param sched
    *            调度器
    * @param triggerName
    * @param triggerGroupName
    * @param time
    *
    * @Title: QuartzManager.java
    */
   public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
      try {
         TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null) {
            return;
         }
         // Trigger已存在,那么更新相应的定时设置
         CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
         // 按新的cronExpression表达式重新构建trigger
         trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
         // 按新的trigger重新设置job执行
         sched.rescheduleJob(triggerKey, trigger);
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description: 移除一个任务
    *
    * @param sched
    *            调度器
    * @param jobName
    * @param jobGroupName
    * @param triggerName
    * @param triggerGroupName
    *
    * @Title: QuartzManager.java
    */
   public static void removeJob(Scheduler sched, String jobName) {
      try {
         LogHelper.test("------modifyJob---任务删除-----" + jobName + "------- ");
         JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
         sched.pauseJob(jobKey);
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         sched.pauseTrigger(triggerKey); // 停止触发器
         sched.unscheduleJob(triggerKey);// 移除触发器
         sched.pauseJob(jobKey); // 停止任务
         sched.deleteJob(jobKey);// 删除任务
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description:启动所有定时任务
    *
    * @param sched
    *            调度器
    *
    * @Title: QuartzManager.java
    */
   public static void startJobs(Scheduler sched) {
      try {
         sched.start();
      } catch (Exception e) {
         e.printStackTrace();
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description:关闭所有定时任务
    *
    *
    * @param sched
    *            调度器
    *
    *
    * @Title: QuartzManager.java
    */
   public static void shutdownJobs(Scheduler sched) {
      try {
         if (!sched.isShutdown()) {
            sched.shutdown();
         }
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
}
package com.yeshi.fanli.job;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Component;
import com.yeshi.fanli.log.LogHelper;
@Component
public class QuartzManager {
   private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
   private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
   /**
    *  创建任务:使用默认 任务组、定时组名
    * @param sched
    * @param jobName
    * @param time
    * @param params
    * @param cls
    */
   public static void addJob(Scheduler sched, Class <? extends Job> jobClass, String jobName,
         String time, Object obj) {
      try {
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null) {
            LogHelper.test("------addJob---任务创建-----" + jobName + "------- ");
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, JOB_GROUP_NAME).build();
            if (obj != null) {
               jobDetail.getJobDataMap().put("key", obj);
            }
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
            trigger = TriggerBuilder.newTrigger().withIdentity(jobName, TRIGGER_GROUP_NAME)
                  .withSchedule(scheduleBuilder).build();
            sched.scheduleJob(jobDetail, trigger);
         }
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * 修改任务
    *
    * @param sched
    * @param jobName
    * @param jobGroupName
    * @param triggerName
    * @param triggerGroupName
    * @param time
    * @param params
    * @param cls
    */
   public static void modifyJob(Scheduler sched, Class <? extends Job> jobClass, String jobName,
          String time, Object obj) {
      try {
         LogHelper.test("------modifyJob---任务修改-----" + jobName + "------- ");
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null)
            return;
         // 删除原任务
         removeJob(sched, jobName);
         // 新建任务
         addJob(sched, jobClass, jobName, time, obj);
      } catch (Exception e) {
         e.printStackTrace();
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description: 修改一个任务的触发时间
    *
    * @param sched
    *            调度器 *
    * @param sched
    *            调度器
    * @param triggerName
    * @param triggerGroupName
    * @param time
    *
    * @Title: QuartzManager.java
    */
   public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
      try {
         TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
         CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
         if (trigger == null) {
            return;
         }
         // Trigger已存在,那么更新相应的定时设置
         CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
         // 按新的cronExpression表达式重新构建trigger
         trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
         // 按新的trigger重新设置job执行
         sched.rescheduleJob(triggerKey, trigger);
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description: 移除一个任务
    *
    * @param sched
    *            调度器
    * @param jobName
    * @param jobGroupName
    * @param triggerName
    * @param triggerGroupName
    *
    * @Title: QuartzManager.java
    */
   public static void removeJob(Scheduler sched, String jobName) {
      try {
         LogHelper.test("------modifyJob---任务删除-----" + jobName + "------- ");
         JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
         sched.pauseJob(jobKey);
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
         sched.pauseTrigger(triggerKey); // 停止触发器
         sched.unscheduleJob(triggerKey);// 移除触发器
         sched.pauseJob(jobKey); // 停止任务
         sched.deleteJob(jobKey);// 删除任务
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description:启动所有定时任务
    *
    * @param sched
    *            调度器
    *
    * @Title: QuartzManager.java
    */
   public static void startJobs(Scheduler sched) {
      try {
         sched.start();
      } catch (Exception e) {
         e.printStackTrace();
         throw new RuntimeException(e);
      }
   }
   /**
    * @Description:关闭所有定时任务
    *
    *
    * @param sched
    *            调度器
    *
    *
    * @Title: QuartzManager.java
    */
   public static void shutdownJobs(Scheduler sched) {
      try {
         if (!sched.isShutdown()) {
            sched.shutdown();
         }
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   }
}