Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。并且还能和spring配置整合使用。Quartz在功能上远远超越了JDK自带的Timer,很好很强大!好啦,直接上代码:

[java] view plaincopy

 
  1. /**
  2. * @Description:
  3. *
  4. * @Title: QuartzManager.java
  5. * @Package com.joyce.quartz
  6. * @Copyright: Copyright (c) 2014
  7. *
  8. * @author Comsys-LZP
  9. * @date 2014-6-26 下午03:15:52
  10. * @version V2.0
  11. */
  12. package com.joyce.quartz;
  13. import org.quartz.CronTrigger;
  14. import org.quartz.JobDetail;
  15. import org.quartz.Scheduler;
  16. import org.quartz.SchedulerFactory;
  17. import org.quartz.impl.StdSchedulerFactory;
  18. /**
  19. * @Description: 定时任务管理类
  20. *
  21. * @ClassName: QuartzManager
  22. * @Copyright: Copyright (c) 2014
  23. *
  24. * @author Comsys-LZP
  25. * @date 2014-6-26 下午03:15:52
  26. * @version V2.0
  27. */
  28. public class QuartzManager {
  29. private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
  30. private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
  31. private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
  32. /**
  33. * @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
  34. *
  35. * @param jobName
  36. *            任务名
  37. * @param cls
  38. *            任务
  39. * @param time
  40. *            时间设置,参考quartz说明文档
  41. *
  42. * @Title: QuartzManager.java
  43. * @Copyright: Copyright (c) 2014
  44. *
  45. * @author Comsys-LZP
  46. * @date 2014-6-26 下午03:47:44
  47. * @version V2.0
  48. */
  49. @SuppressWarnings("unchecked")
  50. public static void addJob(String jobName, Class cls, String time) {
  51. try {
  52. Scheduler sched = gSchedulerFactory.getScheduler();
  53. JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类
  54. // 触发器
  55. CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
  56. trigger.setCronExpression(time);// 触发器时间设定
  57. sched.scheduleJob(jobDetail, trigger);
  58. // 启动
  59. if (!sched.isShutdown()) {
  60. sched.start();
  61. }
  62. } catch (Exception e) {
  63. throw new RuntimeException(e);
  64. }
  65. }
  66. /**
  67. * @Description: 添加一个定时任务
  68. *
  69. * @param jobName
  70. *            任务名
  71. * @param jobGroupName
  72. *            任务组名
  73. * @param triggerName
  74. *            触发器名
  75. * @param triggerGroupName
  76. *            触发器组名
  77. * @param jobClass
  78. *            任务
  79. * @param time
  80. *            时间设置,参考quartz说明文档
  81. *
  82. * @Title: QuartzManager.java
  83. * @Copyright: Copyright (c) 2014
  84. *
  85. * @author Comsys-LZP
  86. * @date 2014-6-26 下午03:48:15
  87. * @version V2.0
  88. */
  89. @SuppressWarnings("unchecked")
  90. public static void addJob(String jobName, String jobGroupName,
  91. String triggerName, String triggerGroupName, Class jobClass,
  92. String time) {
  93. try {
  94. Scheduler sched = gSchedulerFactory.getScheduler();
  95. JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类
  96. // 触发器
  97. CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
  98. trigger.setCronExpression(time);// 触发器时间设定
  99. sched.scheduleJob(jobDetail, trigger);
  100. } catch (Exception e) {
  101. throw new RuntimeException(e);
  102. }
  103. }
  104. /**
  105. * @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
  106. *
  107. * @param jobName
  108. * @param time
  109. *
  110. * @Title: QuartzManager.java
  111. * @Copyright: Copyright (c) 2014
  112. *
  113. * @author Comsys-LZP
  114. * @date 2014-6-26 下午03:49:21
  115. * @version V2.0
  116. */
  117. @SuppressWarnings("unchecked")
  118. public static void modifyJobTime(String jobName, String time) {
  119. try {
  120. Scheduler sched = gSchedulerFactory.getScheduler();
  121. CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
  122. if (trigger == null) {
  123. return;
  124. }
  125. String oldTime = trigger.getCronExpression();
  126. if (!oldTime.equalsIgnoreCase(time)) {
  127. JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);
  128. Class objJobClass = jobDetail.getJobClass();
  129. removeJob(jobName);
  130. addJob(jobName, objJobClass, time);
  131. }
  132. } catch (Exception e) {
  133. throw new RuntimeException(e);
  134. }
  135. }
  136. /**
  137. * @Description: 修改一个任务的触发时间
  138. *
  139. * @param triggerName
  140. * @param triggerGroupName
  141. * @param time
  142. *
  143. * @Title: QuartzManager.java
  144. * @Copyright: Copyright (c) 2014
  145. *
  146. * @author Comsys-LZP
  147. * @date 2014-6-26 下午03:49:37
  148. * @version V2.0
  149. */
  150. public static void modifyJobTime(String triggerName,
  151. String triggerGroupName, String time) {
  152. try {
  153. Scheduler sched = gSchedulerFactory.getScheduler();
  154. CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName);
  155. if (trigger == null) {
  156. return;
  157. }
  158. String oldTime = trigger.getCronExpression();
  159. if (!oldTime.equalsIgnoreCase(time)) {
  160. CronTrigger ct = (CronTrigger) trigger;
  161. // 修改时间
  162. ct.setCronExpression(time);
  163. // 重启触发器
  164. sched.resumeTrigger(triggerName, triggerGroupName);
  165. }
  166. } catch (Exception e) {
  167. throw new RuntimeException(e);
  168. }
  169. }
  170. /**
  171. * @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
  172. *
  173. * @param jobName
  174. *
  175. * @Title: QuartzManager.java
  176. * @Copyright: Copyright (c) 2014
  177. *
  178. * @author Comsys-LZP
  179. * @date 2014-6-26 下午03:49:51
  180. * @version V2.0
  181. */
  182. public static void removeJob(String jobName) {
  183. try {
  184. Scheduler sched = gSchedulerFactory.getScheduler();
  185. sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
  186. sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
  187. sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
  188. } catch (Exception e) {
  189. throw new RuntimeException(e);
  190. }
  191. }
  192. /**
  193. * @Description: 移除一个任务
  194. *
  195. * @param jobName
  196. * @param jobGroupName
  197. * @param triggerName
  198. * @param triggerGroupName
  199. *
  200. * @Title: QuartzManager.java
  201. * @Copyright: Copyright (c) 2014
  202. *
  203. * @author Comsys-LZP
  204. * @date 2014-6-26 下午03:50:01
  205. * @version V2.0
  206. */
  207. public static void removeJob(String jobName, String jobGroupName,
  208. String triggerName, String triggerGroupName) {
  209. try {
  210. Scheduler sched = gSchedulerFactory.getScheduler();
  211. sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
  212. sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
  213. sched.deleteJob(jobName, jobGroupName);// 删除任务
  214. } catch (Exception e) {
  215. throw new RuntimeException(e);
  216. }
  217. }
  218. /**
  219. * @Description:启动所有定时任务
  220. *
  221. *
  222. * @Title: QuartzManager.java
  223. * @Copyright: Copyright (c) 2014
  224. *
  225. * @author Comsys-LZP
  226. * @date 2014-6-26 下午03:50:18
  227. * @version V2.0
  228. */
  229. public static void startJobs() {
  230. try {
  231. Scheduler sched = gSchedulerFactory.getScheduler();
  232. sched.start();
  233. } catch (Exception e) {
  234. throw new RuntimeException(e);
  235. }
  236. }
  237. /**
  238. * @Description:关闭所有定时任务
  239. *
  240. *
  241. * @Title: QuartzManager.java
  242. * @Copyright: Copyright (c) 2014
  243. *
  244. * @author Comsys-LZP
  245. * @date 2014-6-26 下午03:50:26
  246. * @version V2.0
  247. */
  248. public static void shutdownJobs() {
  249. try {
  250. Scheduler sched = gSchedulerFactory.getScheduler();
  251. if (!sched.isShutdown()) {
  252. sched.shutdown();
  253. }
  254. } catch (Exception e) {
  255. throw new RuntimeException(e);
  256. }
  257. }
  258. }

以上就是quartz任务调度对于任务的常用操作,封装起来以便在外部调用!这样我们就需要任务的执行了:

[java] view plaincopy

 
  1. /**
  2. * @Description:
  3. *
  4. * @Title: QuartzJob.java
  5. * @Package com.joyce.quartz
  6. * @Copyright: Copyright (c) 2014
  7. *
  8. * @author Comsys-LZP
  9. * @date 2014-6-26 下午03:37:11
  10. * @version V2.0
  11. */
  12. package com.joyce.quartz;
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;
  15. import org.quartz.Job;
  16. import org.quartz.JobExecutionContext;
  17. import org.quartz.JobExecutionException;
  18. /**
  19. * @Description: 任务执行类
  20. *
  21. * @ClassName: QuartzJob
  22. * @Copyright: Copyright (c) 2014
  23. *
  24. * @author Comsys-LZP
  25. * @date 2014-6-26 下午03:37:11
  26. * @version V2.0
  27. */
  28. public class QuartzJob implements Job {
  29. @Override
  30. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  31. System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "★★★★★★★★★★★");
  32. }
  33. }

Ok,我们来测试一下:

[java] view plaincopy

 
  1. package com.joyce.quartz.main;
  2. import com.joyce.quartz.QuartzJob;
  3. import com.joyce.quartz.QuartzManager;
  4. /**
  5. * @Description: 测试类
  6. *
  7. * @ClassName: QuartzTest
  8. * @Copyright: Copyright (c) 2014
  9. *
  10. * @author Comsys-LZP
  11. * @date 2014-6-26 下午03:35:05
  12. * @version V2.0
  13. */
  14. public class QuartzTest {
  15. public static void main(String[] args) {
  16. try {
  17. String job_name = "动态任务调度";
  18. System.out.println("【系统启动】开始(每1秒输出一次)...");
  19. QuartzManager.addJob(job_name, QuartzJob.class, "0/1 * * * * ?");
  20. Thread.sleep(5000);
  21. System.out.println("【修改时间】开始(每2秒输出一次)...");
  22. QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?");
  23. Thread.sleep(6000);
  24. System.out.println("【移除定时】开始...");
  25. QuartzManager.removeJob(job_name);
  26. System.out.println("【移除定时】成功");
  27. System.out.println("【再次添加定时任务】开始(每10秒输出一次)...");
  28. QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?");
  29. Thread.sleep(60000);
  30. System.out.println("【移除定时】开始...");
  31. QuartzManager.removeJob(job_name);
  32. System.out.println("【移除定时】成功");
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }

任务调度开源框架Quartz动态添加、修改和删除定时任务的更多相关文章

  1. 任务调度开源框架Quartz动态加入、改动和删除定时任务

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包括了调度器监听.作业和触发器监听.你能够配置作业和触发器监听为全局监听或者是特定于 ...

  2. 任务调度开源框架Quartz概述

    任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...

  3. 开源框架Quartz动态加入、改动和删除定时任务 (二)

    貌似每次回过头去看之前写的一些东西,总感觉不是非常完美~~虽说不做完美人.但也要做完美事!这次主要是针对Quartz的动态维护和Spring集成.简单粗暴一点,直接上代码,有什么不了解留言交流 先来一 ...

  4. Java任务调度开源框架quartz学习

    一.quartz学习 Java框架介绍:Quartz从入门到进阶 http://edu.yesky.com/edupxpt/233/2209233.shtml 1.例子:http://javacraz ...

  5. Quartz动态添加、修改和删除定时任务

    任务调度开源框架Quartz动态添加.修改和删除定时任务 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触 ...

  6. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

  7. SpringBoot定时任务升级篇(动态添加修改删除定时任务)

    需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...

  8. Quartz 2.2 动态添加、修改和删除定时任务

    QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTr ...

  9. Quartz 2.3 动态添加、修改和删除定时任务

    下面直接上代码: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu ...

随机推荐

  1. SharePoint 2013 日历视图兼容性问题

    在IE11上访问SharePoint 2013 calendar视图,发现加入兼容性视图以后访问,正常,如下图: 不加入兼容性视图IE11访问,出现兼容性问题,如下图: 因为有些环境有问题,有些环境没 ...

  2. Linux学习心得之 LVM管理与Linux系统安装

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...

  3. WCF分分钟入门

    近来学习wcf,总结了一下入门的经验,小白的入门篇,也方便以后复习,省的去查质料. 第一步:创建wcf程序,程序初始化有一个接口和一个实现类写个简单的返回方法就可以了: 第二步:创建一个宿主,也就是服 ...

  4. android 图片加载库 Glide 的使用介绍

    一:简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech.这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会 ...

  5. 【代码笔记】iOS-单例

    一,工程图. 二,代码. NetManager.h #import <Foundation/Foundation.h> @interface NetManager : NSObject + ...

  6. CoreData的使用

    #import "ViewController.h" #import "Person.h" @interface ViewController () <U ...

  7. igraph安装(R/Python)

    python-igraph:啥都不说了,用Ubuntu吧,虽然按照官方的流程还是会出错,但是排错会比较少,一般找不了多久就能找到解决方案 R-igraph:一般需要升级R版本,用3.3吧.升级R的方法 ...

  8. Adaptive Code Via C#读书笔记

    原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...

  9. android中的广播接收实现总结

    1 首先根据广播应用内接收和应用外接收,分两个类进行管理[1]  LocalBroadcastManager,应用内广播管理类[2]  BroadcastManager  广播管理类(部分应用内,应用 ...

  10. 设计模式C#实现(十二)——装饰模式

    意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 动态的给一个对象添加一些额外的职责. 适用性 动态的为单个对象添加职责而不影响其他对象 处理那些可以撤销的职责(? 在某些功能不需要 ...