@Servicepublic classSchedulerUtil {
@AutowiredprivateScheduler scheduler;private final static Logger LOGGER = LoggerFactory.getLogger(SchedulerUtil.class);/*** @Description: 任务执行类*/
private static SchedulerFactory schedulerFactory = newStdSchedulerFactory();private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";/*** 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
*
*@paramjobName 任务名
*@paramcls 任务
*@paramtime 时间设置,参考quartz说明文档*/
public void addJob(String jobName, Class cls, String time, Mapmap) {try{//Scheduler scheduler = schedulerFactory.getScheduler();//创建一个触发器表
JobDetail jobDetail = JobBuilder.newJob()//创建一个jobbuilder用来定义一个任务明细。
.ofType(cls)//设置类,将被实例化
.withIdentity(new JobKey(jobName, JOB_GROUP_NAME))//使用给定的名称和默认组jobkey识别任务明细
.build();//产品定义的JobDetail实例这jobbuilder。
Trigger trigger= TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(time))//设置schedulebuilder将用于定义触发器的表。
.withIdentity(new TriggerKey(jobName, TRIGGER_GROUP_NAME)).build();//创建Trigger
TriggerKey triggerKey =trigger.getKey();
JobKey jobKey=trigger.getJobKey();//把保存triggerKey和jobKey
map.put("triggerKey", triggerKey);
map.put("jobKey", jobKey);
map.put("jobname", jobName);
jobDetail.getJobDataMap().put("canshu", map);
scheduler.scheduleJob(jobDetail, trigger);//绑定
scheduler.start();
}catch(Exception e) {
LOGGER.error("添加定时任务失败", e.getMessage());throw newRuntimeException(e);
}
}/*** 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
*
*@paramjobName
*@paramtime
* @param map 业务参数,根据实际情况传参*/
public void modifyJobTime(String jobName, String time, Mapmap, String jobkey, String triggerkey) {try{
Trigger trigger= TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(time))//设置schedulebuilder将用于定义触发器的表。
.withIdentity(new TriggerKey(jobName, TRIGGER_GROUP_NAME)).build();//创建Trigger
if (trigger == null) {return;
}
removeJob(new TriggerKey(triggerkey), newJobKey(jobkey));
addJob(jobName, QuartzJob.class, time, map);
}catch(Exception e) {
LOGGER.error("添加定时任务失败", e.getMessage());throw newRuntimeException(e);
}
}/*** 暂停一个任务(使用默认的任务组名,触发器名,触发器组名)
*
*@paramtriggerKey
*@paramjobKey*/
public voidpauseJob(TriggerKey triggerKey, JobKey jobKey) {try{
scheduler.pauseTrigger(triggerKey);//停止触发器
scheduler.pauseJob(jobKey);
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** 恢复一个任务(使用默认的任务组名,触发器名,触发器组名)
*
*@paramtriggerKey
*@paramjobKey*/
public voidresumeJob(TriggerKey triggerKey, JobKey jobKey) {try{
scheduler.resumeTrigger(triggerKey);
scheduler.resumeJob(jobKey);
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
*
*@paramtriggerKey
*@paramjobKey*/
public voidremoveJob(TriggerKey triggerKey, JobKey jobKey) {try{
scheduler.unscheduleJob(triggerKey);//移除触发器
scheduler.deleteJob(jobKey);
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** 启动所有定时任务*/
public voidstartJobs() {try{
Scheduler sched=schedulerFactory.getScheduler();
sched.start();
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** 关闭所有定时任务*/
public voidshutdownJobs() {try{
Scheduler sched=schedulerFactory.getScheduler();if (!sched.isShutdown()) {
sched.shutdown();
}
}catch(Exception e) {throw newRuntimeException(e);
}
}
}