QuartzHelper.java 4.2 KB

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