之前用到了定时任务,而且要求是可以动态修改定时时间,但是不要重启服务器,查了一些资料,找到了很好的一种方法,下面直接上代码。
uartzManager.java 动态添加、修改和删除定时任务管理类
1 package com.datcent.downloadCSV.quartzManager; 2 3 import org.quartz.CronTrigger ; 4 import org.quartz.JobDetail ; 5 import org.quartz.Scheduler ; 6 7 /** 8 * @author 作者xujingyang. E-mail:xjy06@foxmail.com 9 * @version 创建时间:2018年1月17日 下午3:28:14 10 * @类说明: Quartz调度管理器 11 */ 12 public class QuartzManager { 13 private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME"; 14 private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME"; 15 16 /** 17 * @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 18 * 19 * @param sched 20 * 调度器 21 * 22 * @param jobName 23 * 任务名 24 * @param cls 25 * 任务 26 * @param time 27 * 时间设置,参考quartz说明文档 28 * 29 * @Title: QuartzManager.java 30 */ 31 public static void addJob(Scheduler sched, String jobName, @SuppressWarnings("rawtypes") Class cls, String time) { 32 try { 33 JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类 34 // 触发器 35 CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组 36 trigger.setCronExpression(time);// 触发器时间设定 37 sched.scheduleJob(jobDetail, trigger); 38 // 启动 39 if (!sched.isShutdown()) { 40 sched.start(); 41 } 42 } catch (Exception e) { 43 throw new RuntimeException(e); 44 } 45 } 46 47 /** 48 * @Description: 添加一个定时任务 49 * 50 * @param sched 51 * 调度器 52 * 53 * @param jobName 54 * 任务名 55 * @param jobGroupName 56 * 任务组名 57 * @param triggerName 58 * 触发器名 59 * @param triggerGroupName 60 * 触发器组名 61 * @param jobClass 62 * 任务 63 * @param time 64 * 时间设置,参考quartz说明文档 65 * 66 * @Title: QuartzManager.java 67 */ 68 public static void addJob(Scheduler sched, String jobName, String jobGroupName, String triggerName, 69 String triggerGroupName, @SuppressWarnings("rawtypes") Class jobClass, String time) { 70 try { 71 JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类 72 // 触发器 73 CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组 74 trigger.setCronExpression(time);// 触发器时间设定 75 sched.scheduleJob(jobDetail, trigger); 76 } catch (Exception e) { 77 throw new RuntimeException(e); 78 } 79 } 80 81 /** 82 * @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) 83 * 84 * @param sched 85 * 调度器 86 * @param jobName 87 * @param time 88 * 89 * @Title: QuartzManager.java 90 */ 91 @SuppressWarnings("rawtypes") 92 public static void modifyJobTime(Scheduler sched, String jobName, String time) { 93 try { 94 CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName, TRIGGER_GROUP_NAME); 95 if (trigger == null) { 96 return; 97 } 98 String oldTime = trigger.getCronExpression(); 99 if (!oldTime.equalsIgnoreCase(time)) { 100 JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME); 101 Class objJobClass = jobDetail.getJobClass(); 102 removeJob(sched, jobName); 103 addJob(sched, jobName, objJobClass, time); 104 } 105 } catch (Exception e) { 106 throw new RuntimeException(e); 107 } 108 } 109 110 /** 111 * @Description: 修改一个任务的触发时间 112 * 113 * @param sched 114 * 调度器 * 115 * @param sched 116 * 调度器 117 * @param triggerName 118 * @param triggerGroupName 119 * @param time 120 * 121 * @Title: QuartzManager.java 122 */ 123 public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) { 124 try { 125 CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName); 126 if (trigger == null) { 127 return; 128 } 129 String oldTime = trigger.getCronExpression(); 130 if (!oldTime.equalsIgnoreCase(time)) { 131 CronTrigger ct = (CronTrigger) trigger; 132 // 修改时间 133 ct.setCronExpression(time); 134 // 重启触发器 135 sched.resumeTrigger(triggerName, triggerGroupName); 136 } 137 } catch (Exception e) { 138 throw new RuntimeException(e); 139 } 140 } 141 142 /** 143 * @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名) 144 * 145 * @param sched 146 * 调度器 147 * @param jobName 148 * 149 * @Title: QuartzManager.java 150 */ 151 public static void removeJob(Scheduler sched, String jobName) { 152 try { 153 sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器 154 sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器 155 sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务 156 } catch (Exception e) { 157 throw new RuntimeException(e); 158 } 159 } 160 161 /** 162 * @Description: 移除一个任务 163 * 164 * @param sched 165 * 调度器 166 * @param jobName 167 * @param jobGroupName 168 * @param triggerName 169 * @param triggerGroupName 170 * 171 * @Title: QuartzManager.java 172 */ 173 public static void removeJob(Scheduler sched, String jobName, String jobGroupName, String triggerName, 174 String triggerGroupName) { 175 try { 176 sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器 177 sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器 178 sched.deleteJob(jobName, jobGroupName);// 删除任务 179 } catch (Exception e) { 180 throw new RuntimeException(e); 181 } 182 } 183 184 /** 185 * @Description:启动所有定时任务 186 * 187 * @param sched 188 * 调度器 189 * 190 * @Title: QuartzManager.java 191 */ 192 public static void startJobs(Scheduler sched) { 193 try { 194 sched.start(); 195 } catch (Exception e) { 196 throw new RuntimeException(e); 197 } 198 } 199 200 /** 201 * @Description:关闭所有定时任务 202 * 203 * 204 * @param sched 205 * 调度器 206 * 207 * 208 * @Title: QuartzManager.java 209 */ 210 public static void shutdownJobs(Scheduler sched) { 211 try { 212 if (!sched.isShutdown()) { 213 sched.shutdown(); 214 } 215 } catch (Exception e) { 216 throw new RuntimeException(e); 217 } 218 } 219 }