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. Android的消息循环机制 Looper Handler类分析

    Android的消息循环机制 Looper Handler类分析 Looper类说明   Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在ru ...

  2. 关于Android Force Close 出现的原因 以及解决方法

    一.原因: forceclose,意为强行关闭,当前应用程序发生了冲突. NullPointExection(空指针),IndexOutOfBoundsException(下标越界),就连Androi ...

  3. 深入.net(数据类型)

    C#究竟为我们提供了哪些“数据类型”供我们使用?这些类型有什么样的“特征”? 数据类型的分类: --- 数据类型是存放数据的容器.那么我们就以它们“存放数据的方式”分类! 1.值类型:变量中直接存放着 ...

  4. 【代码笔记】iOS-点击一个button,出6个button

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> //加入头文件 #import "DCPathB ...

  5. HTML5 初步了解

    这是HTM5L的第一篇博客. 那么就让我们简单的了解HTML5的语法吧. (HTML5运行环境要求极低,非关键地方就不做截图了) <!--根标签--> <html> <! ...

  6. Sql与MySQL简单入门

    作为过来人,给"新司机"一点建议:运维时需要搭建的生产环境,需尽量保持与测试环境一致:但搭建环境时,又苦于找不到合适的版本怎么办?不用怕,我是一个体贴的人,管杀也管埋(该链接为My ...

  7. SSH新学

    流程:model-->dao-->service-->impService-->action 如果只是操作单个的一个表,比如user表,则都写到user的流程中 如果要操作俩个 ...

  8. [Linux监控]磁盘空间大小

    echo 192.168.10.69>>ip.list ------------------------------------------- #!/bin/bash #注意if和[]之间 ...

  9. 【转载】CentOS 6.3下rsync服务器的安装与配置

    一.rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录. Rsy ...

  10. Hadoop生态圈以及各组成部分的简介

    1.Hadoop是什么? 适合大数据的分布式存储与计算平台 HDFS: Hadoop Distributed File System分布式文件系统 MapReduce:并行计算框架 解决的问题: HD ...