package com.yeshi.fanli.job; import java.util.Iterator; import java.util.Map; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; 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, @SuppressWarnings("rawtypes") Class cls, String jobName, String time, Map params) { 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(cls).withIdentity(jobName, JOB_GROUP_NAME).build(); if (params != null) { Iterator its = params.keySet().iterator(); while (its.hasNext()) { String key = its.next(); jobDetail.getJobDataMap().put(key, params.get(key)); } } 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 */ @SuppressWarnings("rawtypes") public static void modifyJob(Scheduler sched, Class cls, String jobName, String time, Map params ) { 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, QualityFactoryJob.class, jobName, time, params); } 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); } } }