QuartzManager

1 import org.quartz.*; 2 import org.quartz.impl.StdSchedulerFactory; 3 import org.quartz.impl.triggers.CronTriggerImpl; 4 import org.springframework.scheduling.quartz.CronTriggerFactoryBean; 5 6 import java.text.ParseException; 7 8 /** 9 * Created by liuyu on 2017/8/7. 10 */ 11 public class QuartzManager { 12 //private static SchedulerFactoryBean sf = new SchedulerFactoryBean(); 13 private static Scheduler sched=getScheduler(); 14 private static String JOB_GROUP_NAME = "group1"; 15 private static String TRIGGER_GROUP_NAME = "trigger1"; 16 /** 17 * 创建一个调度对象 18 * @return 19 * @throws SchedulerException 20 */ 21 private static Scheduler getScheduler() { 22 SchedulerFactory sf = new StdSchedulerFactory(); 23 Scheduler scheduler=null; 24 try { 25 scheduler = sf.getScheduler(); 26 } catch (SchedulerException e) { 27 e.printStackTrace(); 28 } 29 return scheduler; 30 } 31 /** */ 32 /** 33 * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 34 * 35 * @param jobName 任务名 36 * @param job 任务 37 * @param time 时间设置,参考quartz说明文档 38 * @throws SchedulerException 39 * @throws ParseException 40 */ 41 public static void addJob(String jobName, Job job, String time) 42 throws SchedulerException, ParseException { 43 44 45 JobDetail jobDetail = JobBuilder.newJob(job.getClass()).withIdentity(jobName, JOB_GROUP_NAME).build();//任务名,任务组,任务执行类 46 CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity(jobName, JOB_GROUP_NAME).withSchedule(CronScheduleBuilder.cronSchedule(time)).forJob(jobDetail).build(); 47 48 sched.scheduleJob(jobDetail, trigger); 49 //启动 50 // if (!sched.isShutdown()) 51 // sched.start(); 52 } 53 54 public static void startAllScheduler() { 55 try { 56 if (!sched.isShutdown()) 57 sched.start(); 58 } catch (SchedulerException e) { 59 e.printStackTrace(); 60 } 61 } 62 63 public static void stopAllScheduler() { 64 try { 65 sched.shutdown(); 66 } catch (SchedulerException e) { 67 e.printStackTrace(); 68 } 69 } 70 public static void pauseAllScheduler() { 71 try { 72 sched.pauseAll(); 73 } catch (SchedulerException e) { 74 e.printStackTrace(); 75 } 76 } 77 public static void resumeAllScheduler() { 78 try { 79 sched.resumeAll(); 80 } catch (SchedulerException e) { 81 e.printStackTrace(); 82 } 83 } 84 /** */ 85 /** 86 * 添加一个定时任务 87 * 88 * @param jobName 任务名 89 * @param jobGroupName 任务组名 90 * @param triggerName 触发器名 91 * @param triggerGroupName 触发器组名 92 * @param job 任务 93 * @param time 时间设置,参考quartz说明文档 94 * @throws SchedulerException 95 * @throws ParseException 96 */ 97 public static void addJob(String jobName, String jobGroupName, 98 String triggerName, String triggerGroupName, 99 Job job, String time) 100 throws SchedulerException, ParseException { 101 102 JobDetail jobDetail = JobBuilder.newJob(job.getClass()).withIdentity(jobName, jobGroupName).build();//任务名,任务组,任务执行类 103 CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroupName).withSchedule(CronScheduleBuilder.cronSchedule(time)).forJob(jobDetail).build(); 104 105 sched.scheduleJob(jobDetail,trigger); 106 // if (!sched.isShutdown()) 107 // sched.start(); 108 } 109 110 /** */ 111 /** 112 * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 113 * 114 * @param jobName 115 * @param time 116 * @throws SchedulerException 117 * @throws ParseException 118 */ 119 public static void modifyJobTime(String jobName, String time) 120 throws SchedulerException, ParseException { 121 TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME); 122 Trigger trigger = sched.getTrigger(triggerKey); 123 if (trigger != null) { 124 CronTriggerImpl ct = (CronTriggerImpl) trigger; 125 ct.setCronExpression(time); 126 sched.rescheduleJob(triggerKey, ct); 127 } 128 } 129 130 /** */ 131 /** 132 * 修改一个任务的触发时间 133 * 134 * @param triggerName 135 * @param triggerGroupName 136 * @param time 137 * @throws SchedulerException 138 * @throws ParseException 139 */ 140 public static void modifyJobTime(String triggerName, String triggerGroupName, 141 String time) 142 throws SchedulerException, ParseException { 143 TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); 144 Trigger trigger = sched.getTrigger(triggerKey); 145 146 if (trigger != null) { 147 CronTriggerImpl ct = (CronTriggerImpl) trigger; 148 ct.setCronExpression(time); 149 //重启触发器 150 sched.rescheduleJob(triggerKey, ct); 151 } 152 } 153 154 /** */ 155 /** 156 * 移除一个任务(使用默认的任务组名,触发器名,触发器组名) 157 * 158 * @param jobName 159 * @throws SchedulerException 160 */ 161 public static void removeJob(String jobName) 162 throws SchedulerException { 163 TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME); 164 sched.pauseTrigger(triggerKey);//停止触发器 165 sched.unscheduleJob(triggerKey);//移除触发器 166 sched.deleteJob(JobKey.jobKey(jobName, TRIGGER_GROUP_NAME));//删除任务 167 } 168 169 /** */ 170 /** 171 * 移除一个任务 172 * 173 * @param jobName 174 * @param jobGroupName 175 * @param triggerName 176 * @param triggerGroupName 177 * @throws SchedulerException 178 */ 179 public static void removeJob(String jobName, String jobGroupName, 180 String triggerName, String triggerGroupName) 181 throws SchedulerException { 182 TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); 183 sched.pauseTrigger(triggerKey);//停止触发器 184 sched.unscheduleJob(triggerKey);//移除触发器 185 sched.deleteJob(JobKey.jobKey(triggerName, triggerGroupName));//删除任务 186 } 187 }