DynamicSchedulerUtil.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package com.xxl.quartz;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import org.quartz.CronScheduleBuilder;
  9. import org.quartz.CronTrigger;
  10. import org.quartz.Job;
  11. import org.quartz.JobBuilder;
  12. import org.quartz.JobDataMap;
  13. import org.quartz.JobDetail;
  14. import org.quartz.JobKey;
  15. import org.quartz.Scheduler;
  16. import org.quartz.SchedulerException;
  17. import org.quartz.Trigger;
  18. import org.quartz.Trigger.TriggerState;
  19. import org.quartz.TriggerBuilder;
  20. import org.quartz.TriggerKey;
  21. import org.quartz.impl.matchers.GroupMatcher;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import org.springframework.beans.factory.InitializingBean;
  25. import org.springframework.util.Assert;
  26. public final class DynamicSchedulerUtil implements InitializingBean {
  27. private static final Logger logger = LoggerFactory.getLogger(DynamicSchedulerUtil.class);
  28. // Scheduler
  29. private static Scheduler scheduler;
  30. public static void setScheduler(Scheduler scheduler) {
  31. DynamicSchedulerUtil.scheduler = scheduler;
  32. }
  33. @Override
  34. public void afterPropertiesSet() throws Exception {
  35. Assert.notNull(scheduler, "quartz scheduler is null");
  36. logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
  37. }
  38. // getJobKeys
  39. public static List<Map<String, Object>> getJobList(){
  40. List<Map<String, Object>> jobList = new ArrayList<Map<String,Object>>();
  41. try {
  42. if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {
  43. return null;
  44. }
  45. String groupName = scheduler.getJobGroupNames().get(0);
  46. Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
  47. if (jobKeys!=null && jobKeys.size()>0) {
  48. for (JobKey jobKey : jobKeys) {
  49. TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);
  50. Trigger trigger = scheduler.getTrigger(triggerKey);
  51. JobDetail jobDetail = scheduler.getJobDetail(jobKey);
  52. TriggerState triggerState = scheduler.getTriggerState(triggerKey);
  53. Map<String, Object> jobMap = new HashMap<String, Object>();
  54. jobMap.put("TriggerKey", triggerKey);
  55. jobMap.put("Trigger", trigger);
  56. jobMap.put("JobDetail", jobDetail);
  57. jobMap.put("TriggerState", triggerState);
  58. jobList.add(jobMap);
  59. }
  60. }
  61. } catch (SchedulerException e) {
  62. e.printStackTrace();
  63. return null;
  64. }
  65. return jobList;
  66. }
  67. public static final String job_desc = "job_desc";
  68. // addJob 新增
  69. public static boolean addJob(String triggerKeyName, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> jobData) throws SchedulerException {
  70. // TriggerKey : name + group
  71. String group = Scheduler.DEFAULT_GROUP;
  72. TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
  73. // TriggerKey valid if_exists
  74. if (scheduler.checkExists(triggerKey)) {
  75. Trigger trigger = scheduler.getTrigger(triggerKey);
  76. logger.info(">>>>>>>>> Already exist trigger [" + trigger + "] by key [" + triggerKey + "] in Scheduler");
  77. return false;
  78. }
  79. // CronTrigger : TriggerKey + cronExpression
  80. CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
  81. CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
  82. // JobDetail : jobClass
  83. JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(triggerKeyName, group).build();
  84. if (jobData!=null && jobData.size() > 0) {
  85. JobDataMap jobDataMap = jobDetail.getJobDataMap();
  86. jobDataMap.putAll(jobData); // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
  87. }
  88. // schedule : jobDetail + cronTrigger
  89. Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
  90. logger.info(">>>>>>>>>>> addJob success, jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);
  91. return true;
  92. }
  93. // reschedule 重置cron
  94. public static boolean rescheduleJob(String triggerKeyName, String cronExpression) throws SchedulerException {
  95. // TriggerKey : name + group
  96. String group = Scheduler.DEFAULT_GROUP;
  97. TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
  98. boolean result = false;
  99. if (scheduler.checkExists(triggerKey)) {
  100. // CronTrigger : TriggerKey + cronExpression
  101. CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
  102. CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
  103. Date date = scheduler.rescheduleJob(triggerKey, cronTrigger);
  104. result = true;
  105. logger.info(">>>>>>>>>>> resumeJob success, triggerKey:{}, cronExpression:{}, date:{}", triggerKey, cronExpression, date);
  106. } else {
  107. logger.info(">>>>>>>>>>> resumeJob fail, triggerKey:{}, cronExpression:{}", triggerKey, cronExpression);
  108. }
  109. return result;
  110. }
  111. // unscheduleJob 删除
  112. public static boolean removeJob(String triggerKeyName) throws SchedulerException {
  113. // TriggerKey : name + group
  114. String group = Scheduler.DEFAULT_GROUP;
  115. TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
  116. boolean result = false;
  117. if (scheduler.checkExists(triggerKey)) {
  118. result = scheduler.unscheduleJob(triggerKey);
  119. }
  120. logger.info(">>>>>>>>>>> removeJob, triggerKey:{}, result [{}]", triggerKey, result);
  121. return result;
  122. }
  123. // Pause 暂停
  124. public static boolean pauseJob(String triggerKeyName) throws SchedulerException {
  125. // TriggerKey : name + group
  126. String group = Scheduler.DEFAULT_GROUP;
  127. TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
  128. boolean result = false;
  129. if (scheduler.checkExists(triggerKey)) {
  130. scheduler.pauseTrigger(triggerKey);
  131. result = true;
  132. logger.info(">>>>>>>>>>> pauseJob success, triggerKey:{}", triggerKey);
  133. } else {
  134. logger.info(">>>>>>>>>>> pauseJob fail, triggerKey:{}", triggerKey);
  135. }
  136. return result;
  137. }
  138. // resume 重启
  139. public static boolean resumeJob(String triggerKeyName) throws SchedulerException {
  140. // TriggerKey : name + group
  141. String group = Scheduler.DEFAULT_GROUP;
  142. TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, group);
  143. boolean result = false;
  144. if (scheduler.checkExists(triggerKey)) {
  145. scheduler.resumeTrigger(triggerKey);
  146. result = true;
  147. logger.info(">>>>>>>>>>> resumeJob success, triggerKey:{}", triggerKey);
  148. } else {
  149. logger.info(">>>>>>>>>>> resumeJob fail, triggerKey:{}", triggerKey);
  150. }
  151. return result;
  152. }
  153. }