package com.yihu.wlyy.job; import java.util.Date; import java.util.Map; import javax.annotation.PostConstruct; import com.yihu.wlyy.repository.*; import org.quartz.*; import org.quartz.impl.triggers.SimpleTriggerImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.stereotype.Component; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; @Component("quartzHelper") public class QuartzHelper { @Autowired private SchedulerFactoryBean schedulerFactoryBean; private Scheduler scheduler = null; @PostConstruct public void init() { try { scheduler = schedulerFactoryBean.getScheduler(); scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } } public void addJob(Class jobClass, String cronString, String jobKey, Map params) throws Exception { if (!CronExpression.isValidExpression(cronString)) { throw new Exception("cronExpression is not a valid Expression"); } try { JobDetail job = JobBuilder.newJob(jobClass) .withIdentity("job-id:" + jobKey, "job-group:" + jobKey) .build(); JobDataMap jobDataMap = job.getJobDataMap(); jobDataMap.putAll(params); CronTrigger trigger = TriggerBuilder .newTrigger() .withIdentity("trigger-name:" + jobKey, "trigger-group:" + jobKey) .withSchedule(CronScheduleBuilder.cronSchedule(cronString)) .build(); scheduler.scheduleJob(job, trigger); scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } } public void removeJob(String jobKeyString) throws Exception { TriggerKey triggerKey = new TriggerKey("trigger-name:" + jobKeyString, "trigger-group:" + jobKeyString); JobKey jobName = new JobKey("job-group:" + jobKeyString, "job-id:" + jobKeyString); scheduler.pauseTrigger(triggerKey);// 停止触发器 scheduler.unscheduleJob(triggerKey);// 移除触发器 scheduler.deleteJob(jobName);// 删除任务 } public boolean isExistJob(String jobKey) throws SchedulerException { JobKey jk = new JobKey("job-id:" + jobKey,"job-group:" + jobKey); if(scheduler.checkExists(jk)){ return true; }else{ return false; } } public void startNow(Class jobClass, String id, Map params) throws Exception { JobDetail job = JobBuilder.newJob(jobClass). withIdentity("job-simple-id:" + id, "job-simple-group:" + id) .build(); JobDataMap jobDataMap = job.getJobDataMap(); jobDataMap.putAll(params); SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1-simple-id:" + id, "group1-simple-group:" + id) .startAt(new Date()).withSchedule(simpleSchedule() .withIntervalInSeconds(10) .withRepeatCount(0) ) .build(); scheduler.scheduleJob(job, trigger); scheduler.start(); } }