public classQuartzManager {private static SchedulerFactory schedulerFactory = newStdSchedulerFactory();/*** @Description: 添加一个定时任务
*
*@paramjobName 任务名
*@paramjobGroupName 任务组名
*@paramtriggerName 触发器名
*@paramtriggerGroupName 触发器组名
*@paramjobClass 任务
*@paramcron 时间设置,参考quartz说明文档*/@SuppressWarnings({"unchecked", "rawtypes"})public static voidaddJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class jobClass, String cron) {try{
Scheduler sched=schedulerFactory.getScheduler();//任务名,任务组,任务执行类
JobDetail jobDetail=JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();//触发器
TriggerBuilder triggerBuilder =TriggerBuilder.newTrigger();//触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();//触发器时间设定
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));//创建Trigger对象
CronTrigger trigger =(CronTrigger) triggerBuilder.build();//调度容器设置JobDetail和Trigger
sched.scheduleJob(jobDetail, trigger);//启动
if (!sched.isShutdown()) {
sched.start();
}
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** @Description: 修改一个任务的触发时间
*
*@paramjobName
*@paramjobGroupName
*@paramtriggerName 触发器名
*@paramtriggerGroupName 触发器组名
*@paramcron 时间设置,参考quartz说明文档*/
public static voidmodifyJobTime(String jobName, String jobGroupName, String triggerName, String triggerGroupName, String cron) {try{
Scheduler sched=schedulerFactory.getScheduler();
TriggerKey triggerKey=TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger=(CronTrigger) sched.getTrigger(triggerKey);if (trigger == null) {return;
}
String oldTime=trigger.getCronExpression();if (!oldTime.equalsIgnoreCase(cron)) {/**方式一 :调用 rescheduleJob 开始*/
//触发器
TriggerBuilder triggerBuilder =TriggerBuilder.newTrigger();//触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();//触发器时间设定
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));//创建Trigger对象
trigger =(CronTrigger) triggerBuilder.build();
sched.rescheduleJob(triggerKey, trigger);/**方式二:先删除,然后在创建一个新的Job*/
/*JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));
Class extends Job> jobClass = jobDetail.getJobClass();
removeJob(jobName, jobGroupName, triggerName, triggerGroupName);
addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);*/}
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** @Description: 移除一个任务
*
*@paramjobName
*@paramjobGroupName
*@paramtriggerName
*@paramtriggerGroupName*/
public static voidremoveJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName) {try{
Scheduler sched=schedulerFactory.getScheduler();
TriggerKey triggerKey=TriggerKey.triggerKey(triggerName, triggerGroupName);
sched.pauseTrigger(triggerKey);//停止触发器
sched.unscheduleJob(triggerKey);//移除触发器
sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));//删除任务
} catch(Exception e) {throw newRuntimeException(e);
}
}/*** @Description:启动所有定时任务*/
public static voidstartJobs() {try{
Scheduler sched=schedulerFactory.getScheduler();
sched.start();
}catch(Exception e) {throw newRuntimeException(e);
}
}/*** @Description:关闭所有定时任务*/
public static voidshutdownJobs() {try{
Scheduler sched=schedulerFactory.getScheduler();if (!sched.isShutdown()) {
sched.shutdown();
}
}catch(Exception e) {throw newRuntimeException(e);
}
}
}