QuartzHelper.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package com.yihu.jw.job;
  2. import org.apache.commons.collections.map.HashedMap;
  3. import org.quartz.*;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.scheduling.quartz.SchedulerFactoryBean;
  6. import org.springframework.stereotype.Component;
  7. import javax.annotation.PostConstruct;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
  13. @Component("quartzHelper")
  14. public class QuartzHelper {
  15. @Autowired
  16. private SchedulerFactoryBean schedulerFactoryBean;
  17. private Scheduler scheduler = null;
  18. @PostConstruct
  19. public void init() {
  20. try {
  21. scheduler = schedulerFactoryBean.getScheduler();
  22. scheduler.start();
  23. } catch (SchedulerException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. public Map<String,Object> getCalendar()throws Exception{
  28. Map<String,Object> rs = new HashedMap();
  29. rs.put("JobGroupNames ",scheduler.getJobGroupNames());
  30. rs.put("SchedulerName ",scheduler.getSchedulerName());
  31. rs.put("TriggerGroups ",scheduler.getPausedTriggerGroups());
  32. return rs;
  33. }
  34. public void addJob(Class jobClass, String cronString, String jobKey,
  35. Map<String, Object> params) throws Exception {
  36. if (!CronExpression.isValidExpression(cronString)) {
  37. throw new Exception("cronExpression is not a valid Expression");
  38. }
  39. try {
  40. JobDetail job = JobBuilder.newJob(jobClass)
  41. .withIdentity("job-id:" + jobKey, "job-group:" + jobKey)
  42. .build();
  43. JobDataMap jobDataMap = job.getJobDataMap();
  44. jobDataMap.putAll(params);
  45. CronTrigger trigger = TriggerBuilder
  46. .newTrigger()
  47. .withIdentity("trigger-name:" + jobKey,
  48. "trigger-group:" + jobKey)
  49. .withSchedule(CronScheduleBuilder.cronSchedule(cronString))
  50. .build();
  51. scheduler.scheduleJob(job, trigger);
  52. scheduler.start();
  53. } catch (SchedulerException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. public void removeJob(String jobKeyString) throws Exception {
  58. TriggerKey triggerKey = new TriggerKey("trigger-name:" + jobKeyString,
  59. "trigger-group:" + jobKeyString);
  60. // JobKey jobName = new JobKey("job-group:" + jobKeyString, "job-id:"
  61. // + jobKeyString);
  62. JobKey jobName = new JobKey("job-id:" + jobKeyString, "job-group:"
  63. + jobKeyString);
  64. scheduler.pauseTrigger(triggerKey);// 停止触发器
  65. scheduler.unscheduleJob(triggerKey);// 移除触发器
  66. scheduler.deleteJob(jobName);// 删除任务
  67. }
  68. public boolean isExistJob(String jobKey) throws SchedulerException {
  69. JobKey jk = new JobKey("job-id:" + jobKey, "job-group:" + jobKey);
  70. if (scheduler.checkExists(jk)) {
  71. return true;
  72. } else {
  73. return false;
  74. }
  75. }
  76. /**
  77. * 立即执行任务。
  78. *
  79. * @param jobClass
  80. * @param id
  81. * @param params
  82. * @throws Exception
  83. */
  84. public void startNow(Class jobClass, String id, Map<String, Object> params) throws Exception {
  85. startAt(new Date(), jobClass, id, params);
  86. }
  87. /**
  88. * 在指定时间点执行。
  89. *
  90. * @param time
  91. * @param jobClass
  92. * @param id
  93. * @param params
  94. * @throws Exception
  95. */
  96. public void startAt(Date time, Class jobClass, String id, Map<String, Object> params) throws Exception {
  97. JobDetail job = JobBuilder.newJob(jobClass).
  98. withIdentity("job-id:" + id, "job-group:" + id)
  99. .build();
  100. JobDataMap jobDataMap = job.getJobDataMap();
  101. if(null != params) jobDataMap.putAll(params);
  102. SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-id:" + id, "group-group:" + id)
  103. .startAt(time)
  104. .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(0))
  105. .build();
  106. scheduler.scheduleJob(job, trigger);
  107. scheduler.start();
  108. }
  109. }