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. 渗透测试常规思路分析-FREEBUF

    最基础但练得好最后也非常厉害 1.  主要由于服务器配置等原因造成的信息泄露 常用google ,bing等搜索工具,轻量级的搜索出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露, ...

  2. 经典的Java基础面试题集锦

    经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用 ...

  3. phonegap + Framework7 之 ios 推送跳转测试

    先说说项目情况:使用phonegap创建的ios项目,然后在使用html + css开发网页中又使用了一个框架Framework7(Framework7是一个构建仿原生ios和android应用的框架 ...

  4. 动画效果 View控件的显示和隐藏效果

    显示动画: mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,     Animation.RELATIVE_ ...

  5. 【代码笔记】iOS-按钮带下划线的写法

    一,效果图. 二,工程图. 三,代码. RootViewController.h RootViewController.m - (void)viewDidLoad { [super viewDidLo ...

  6. C语言中的循环结构与选择结构

    1. 为什么使用循环? 重复执行某段代码 2. while(条件){ 循环体: } 当条件成立的时候就执行循环体,条件不成立,就退出循环,继续执行while后面的语句 3. for ( 初始表达式 : ...

  7. Android点击空白处,隐藏软键盘

    在做登陆或者注册的时候,软键盘经常可能会挡住一些界面.我们需要在输入完成之后隐藏软键盘. 在我们点击空白处或者非EditText的地方来隐藏软键盘. public class HomeActivity ...

  8. 使用mvn生成webapp失败,尚未找到原因

    执行命令: mvn archetype:create -DgroupId=com.jd.ads.test -DartifactId=testTools -DarchetypeArtifactId=ma ...

  9. .NET读写Excel工具Spire.XlS使用(DataExport )

    Introduction E-ICEBLUE is developing office.net component, the main products include Spire.Doc, Spir ...

  10. Tomcat:基于HTTP协议的Connector配置

    Tomcat Connector 是请求接收环节与请求处理环节的连接器,具体点说,就是将接收到的请求传递给Tomcat WEB容器进行处理. Tomcat可以处理的不同协议的请求,例如HTTP协议.A ...