package com.heyi.yanglao.common.job.util; import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import java.util.Date; /** * 定时任务工具类 * * @author jiang */ @Slf4j public class ScheduleUtils { private final static String JOB_NAME = "TASK_"; /** * 获取触发器key */ public static TriggerKey getTriggerKey(String jobId) { return TriggerKey.triggerKey(JOB_NAME + "TRIGGER_KEY" + jobId); } /** * 获取jobKey */ public static JobKey getJobKey(String jobId) { return JobKey.jobKey(JOB_NAME + "JOB_KEY" + jobId); } /** * 获取表达式触发器 */ public static CronTrigger getCronTrigger(Scheduler scheduler, String jobId) { try { return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId)); } catch (SchedulerException e) { e.printStackTrace(); log.info("获取表达式触发器失败"); log.info("productId:" + jobId); return null; } } /** * 创建定时任务 * * @param scheduler * @param activeId 活动id * @param status 1进行中2未开始3已结束 * @param cron */ public static void createScheduleJob(Scheduler scheduler, String activeId, String status, String cron) { try { log.info("创建定时任务"); log.info("activeId:" + activeId); log.info("status:" + status); //构建job信息 JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(activeId)).build(); //表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionDoNothing(); //按新的cronExpression表达式构建一个新的trigger CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(activeId)).withSchedule(scheduleBuilder).build(); //放入参数,运行时的方法可以获取 jobDetail.getJobDataMap().put("activeId", activeId); jobDetail.getJobDataMap().put("status", status); //执行定时器 scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { e.printStackTrace(); log.info("创建定时任务失败"); log.info("activeId:" + activeId); } } /** * 更新定时任务 * * @param scheduler * @param activeId 活动id * @param status 1进行中2未开始3已结束 * @param cron */ public static void updateScheduleJob(Scheduler scheduler, String activeId, String status, String cron) { try { log.info("更新定时任务"); log.info("activeId:" + activeId); log.info("status:" + status); TriggerKey triggerKey = getTriggerKey(activeId); //表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionDoNothing(); CronTrigger trigger = getCronTrigger(scheduler, activeId); //按新的cronExpression表达式重新构建trigger trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); //参数 trigger.getJobDataMap().put("activeId", activeId); trigger.getJobDataMap().put("status", status); scheduler.rescheduleJob(triggerKey, trigger); log.info("更新定时任务开始," + DateUtil.formatDate(new Date())); } catch (SchedulerException e) { e.printStackTrace(); log.info("更新定时任务失败"); log.info("activeId:" + activeId); } } /** * 删除定时任务 * * @param scheduler * @param activeId */ public static void deleteScheduleJob(Scheduler scheduler, String activeId) { try { log.info("删除定时任务"); log.info("activeId:" + activeId); scheduler.deleteJob(getJobKey(activeId)); } catch (SchedulerException e) { e.printStackTrace(); log.info("删除定时任务失败"); log.info("activeId:" + activeId); } } }
相关文章: