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 }