package jnpf.flowable.job; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; /** * 类的描述 * * @author JNPF@YinMai Info. Co., Ltd * @version 5.0.x * @since 2024/9/20 16:48 */ @Slf4j public class QuartzJobUtil { private static final SchedulerFactory schedulerFactory = new StdSchedulerFactory(); public static void addJob(String jobName, String cron, Class jobClass, JobDataMap jobDataMap, Date startDate, Date endDate) { if (jobDataMap == null) { jobDataMap = new JobDataMap(); } JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName).setJobData(jobDataMap).build(); Trigger trigger = TriggerBuilder.newTrigger() .forJob(jobDetail) .withIdentity(jobName) .withSchedule(CronScheduleBuilder.cronSchedule(cron)) .startAt(startDate == null ? new Date() : startDate) .endAt(endDate != null ? endDate : null) .build(); try { //获取实例化的 Scheduler。 Scheduler scheduler = getScheduler(); //将任务及其触发器放入调度器 scheduler.scheduleJob(jobDetail, trigger); //调度器开始调度任务 if (!scheduler.isShutdown()) { scheduler.start(); } } catch (SchedulerException e) { log.error("新增调度失败:" + e.getMessage()); } } private static Scheduler getScheduler() { try { return schedulerFactory.getScheduler(); } catch (SchedulerException e) { e.getMessage(); } return null; } public static void deleteJob(String jobName) { try { TriggerKey triggerKey = TriggerKey.triggerKey(jobName); Scheduler scheduler = getScheduler(); scheduler.pauseTrigger(triggerKey); scheduler.unscheduleJob(triggerKey); scheduler.deleteJob(JobKey.jobKey(jobName)); } catch (SchedulerException e) { e.getMessage(); } } }