转发的代码,原理就不提了

下面直接上代码: 
QuartzManager.java 动态添加、修改和删除定时任务管理类

  1. import org.quartz.CronScheduleBuilder;
  2. import org.quartz.CronTrigger;
  3. import org.quartz.Job;
  4. import org.quartz.JobBuilder;
  5. import org.quartz.JobDetail;
  6. import org.quartz.JobKey;
  7. import org.quartz.Scheduler;
  8. import org.quartz.SchedulerFactory;
  9. import org.quartz.Trigger;
  10. import org.quartz.TriggerBuilder;
  11. import org.quartz.TriggerKey;
  12. import org.quartz.impl.StdSchedulerFactory;
  13.  
  14. public class QuartzManager {
  15.  
  16. private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  17.  
  18. /**
  19. * @Description: 添加一个定时任务
  20. *
  21. * @param jobName 任务名
  22. * @param jobGroupName 任务组名
  23. * @param triggerName 触发器名
  24. * @param triggerGroupName 触发器组名
  25. * @param jobClass 任务
  26. * @param cron 时间设置,参考quartz说明文档
  27. */
  28. @SuppressWarnings({ "unchecked", "rawtypes" })
  29. public static void addJob(String jobName, String jobGroupName,
  30. String triggerName, String triggerGroupName, Class jobClass, String cron) {
  31. try {
  32. Scheduler sched = schedulerFactory.getScheduler();
  33. // 任务名,任务组,任务执行类
  34. JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
  35.  
  36. // 触发器
  37. TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
  38. // 触发器名,触发器组
  39. triggerBuilder.withIdentity(triggerName, triggerGroupName);
  40. triggerBuilder.startNow();
  41. // 触发器时间设定
  42. triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
  43. // 创建Trigger对象
  44. CronTrigger trigger = (CronTrigger) triggerBuilder.build();
  45.  
  46. // 调度容器设置JobDetail和Trigger
  47. sched.scheduleJob(jobDetail, trigger);
  48.  
  49. // 启动
  50. if (!sched.isShutdown()) {
  51. sched.start();
  52. }
  53. } catch (Exception e) {
  54. throw new RuntimeException(e);
  55. }
  56. }
  57.  
  58. /**
  59. * @Description: 修改一个任务的触发时间
  60. *
  61. * @param jobName
  62. * @param jobGroupName
  63. * @param triggerName 触发器名
  64. * @param triggerGroupName 触发器组名
  65. * @param cron 时间设置,参考quartz说明文档
  66. */
  67. public static void modifyJobTime(String jobName,
  68. String jobGroupName, String triggerName, String triggerGroupName, String cron) {
  69. try {
  70. Scheduler sched = schedulerFactory.getScheduler();
  71. TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
  72. CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
  73. if (trigger == null) {
  74. return;
  75. }
  76.  
  77. String oldTime = trigger.getCronExpression();
  78. if (!oldTime.equalsIgnoreCase(cron)) {
  79. /** 方式一 :调用 rescheduleJob 开始 */
  80. // 触发器
  81. TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
  82. // 触发器名,触发器组
  83. triggerBuilder.withIdentity(triggerName, triggerGroupName);
  84. triggerBuilder.startNow();
  85. // 触发器时间设定
  86. triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
  87. // 创建Trigger对象
  88. trigger = (CronTrigger) triggerBuilder.build();
  89. // 方式一 :修改一个任务的触发时间
  90. sched.rescheduleJob(triggerKey, trigger);
  91. /** 方式一 :调用 rescheduleJob 结束 */
  92.  
  93. /** 方式二:先删除,然后在创建一个新的Job */
  94. //JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));
  95. //Class<? extends Job> jobClass = jobDetail.getJobClass();
  96. //removeJob(jobName, jobGroupName, triggerName, triggerGroupName);
  97. //addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);
  98. /** 方式二 :先删除,然后在创建一个新的Job */
  99. }
  100. } catch (Exception e) {
  101. throw new RuntimeException(e);
  102. }
  103. }
  104.  
  105. /**
  106. * @Description: 移除一个任务
  107. *
  108. * @param jobName
  109. * @param jobGroupName
  110. * @param triggerName
  111. * @param triggerGroupName
  112. */
  113. public static void removeJob(String jobName, String jobGroupName,
  114. String triggerName, String triggerGroupName) {
  115. try {
  116. Scheduler sched = schedulerFactory.getScheduler();
  117.  
  118. TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
  119.  
  120. sched.pauseTrigger(triggerKey);// 停止触发器
  121. sched.unscheduleJob(triggerKey);// 移除触发器
  122. sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务
  123. } catch (Exception e) {
  124. throw new RuntimeException(e);
  125. }
  126. }
  127.  
  128. /**
  129. * @Description:启动所有定时任务
  130. */
  131. public static void startJobs() {
  132. try {
  133. Scheduler sched = schedulerFactory.getScheduler();
  134. sched.start();
  135. } catch (Exception e) {
  136. throw new RuntimeException(e);
  137. }
  138. }
  139.  
  140. /**
  141. * @Description:关闭所有定时任务
  142. */
  143. public static void shutdownJobs() {
  144. try {
  145. Scheduler sched = schedulerFactory.getScheduler();
  146. if (!sched.isShutdown()) {
  147. sched.shutdown();
  148. }
  149. } catch (Exception e) {
  150. throw new RuntimeException(e);
  151. }
  152. }
  153. }

好用的Quartz管理器类的更多相关文章

  1. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  2. X509证书信任管理器类的详解

    在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类.我们可以自己实现该接口,让它信任我们指定的证书. 接口X509TrustManager有下述三个公有的方法需要我们实现 ...

  3. Django 自定义模型管理器类2个应用场景

    class BookManager(models.Manager): # 改变查询集的结果集 def all(self): books = super().all() # QuerySet books ...

  4. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  5. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  6. Duilib源码分析(四)绘制管理器—CPaintManagerUI

    接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...

  7. 从零开始山寨Caffe·叁:全局线程管理器

    你需要一个管家,随手召唤的那种,想吃啥就吃啥. ——设计一个全局线程管理器 一个机器学习系统,需要管理一些公共的配置信息,如何存储这些配置信息,是一个难题. 设计模式 MVC框架 在传统的MVC编程框 ...

  8. 设计模式之美:Manager(管理器)

    索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的变化独立于类本身,并且管理 ...

  9. Manager(管理器)

    Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的 ...

随机推荐

  1. 微信公众号申请+新浪SAE申请

    一. 新浪SAE服务申请 1. 注冊地址:http://t.cn/RqMHPto 2. 选择控制台>>云应用SAE 3. 创建新应用 4. 填写域名 5. 代码管理选择SVN 6. 创建版 ...

  2. golang 特殊知识点

    golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...

  3. 【JavaScript 插件】图片展示插件 PhotoSwipe 初识

    前言: 考虑自己网站的图片展示,而且要支持移动端和PC端.自己写的代码也不尽如意,要写好的话也需要时间,于是就想到了使用相关插件. 准备: PhotoSwipe 官网地址:http://photosw ...

  4. zigw 和 nanoWatch, libudev.so 和 XMR 挖矿程序查杀记录

    最近这两天以来,服务器一致声音很响.本来以为有同事在运行大的程序,结果后来发现持续很长时间都是这样,并没有停的样子.后来查了一下,发现有几个可疑进程导致,干掉之后,果然服务器静悄悄了. 但是,问题并没 ...

  5. Keras/Tensorflow选择GPU/CPU运行

    首先,导入os,再按照PCI_BUS_ID顺序,从0开始排列GPU, import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_B ...

  6. 每天一个linux命令:vmstat

    1.命令简介 vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程.内存.I/O等系统整体运行状态. 2.用法 ...

  7. notepad++ 复制代码--高亮 - 带颜色

    思路来源:http://blog.csdn.net/super828/article/details/72826024 选择代码,然后右键选择菜单命令

  8. SNF软件开发机器人-子系统-功能-功能类型(普通表改为树型表)

    功能类型(普通表改为树型表) 功能类型分为普通功能和树形功能.因为资源表中不存在ParentId字段,故只能将多表的主表改为树型表. 1.效果展示: 2.使用说明: (1)当需要用一张普通的资源表显示 ...

  9. Spark 精品文章转载(目录)

    学习 Spark 中,别人整理不错的文章,转载至本博客,方便自己学习,并按照不同的模块归档整理.每个文章作者能力不同,写文章所处的时间点不同,可能会略有差异,在阅读的同时,注意当时的文章的内容是否已经 ...

  10. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...