quartz 定时任务动态管理

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

Test.java
 
  
  1. package com.hjh.mall.quartz.promotion;
  2. /**
  3. * @Project: mall-uag
  4. * @Description
  5. * @author yangyh
  6. * @date 201776
  7. * @version V1.0
  8. */
  9. public class Test {
  10. public static String JOB_NAME = "动态任务调度";
  11. public static String TRIGGER_NAME = "动态任务触发器";
  12. public static String JOB_GROUP_NAME = "XLXXCC_JOB_GROUP";
  13. public static String TRIGGER_GROUP_NAME = "XLXXCC_JOB_GROUP";
  14. public static void main(String[] args) {
  15. try {
  16. System.out.println("【系统启动】开始(每1秒输出一次)...");
  17. QuartzManager.addJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, MyJob.class,
  18. "0/1 * * * * ?");
  19. System.out.println("【系统启动】再来一次(每1秒输出一次)...");
  20. QuartzManager.addJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, MyJob.class,
  21. "0/1 * * * * ?");
  22. Thread.sleep(5000);
  23. System.out.println("【修改时间】开始(每5秒输出一次)...");
  24. QuartzManager.modifyJobTime(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME,
  25. "0/5 * * * * ?");
  26. Thread.sleep(6000);
  27. System.out.println("【移除定时】开始...");
  28. QuartzManager.removeJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME);
  29. System.out.println("【移除定时】成功");
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值