之前用到了定时任务,而且要求是可以动态修改定时时间,但是不要重启服务器,查了一些资料,找到了很好的一种方法,下面直接上代码。

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 }
View Code

相关文章:

  • 2021-07-30
  • 2022-12-23
  • 2021-08-13
  • 2021-12-12
  • 2021-07-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-13
相关资源
相似解决方案