JobService.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.example.xiaoshiweixinback.service.quartzService;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.example.xiaoshiweixinback.entity.quartz.QrtzTaskDTO;
  4. import com.example.xiaoshiweixinback.entity.quartz.QuartzVO;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.quartz.*;
  8. import org.springframework.context.annotation.Lazy;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.transaction.annotation.Transactional;
  11. @Service
  12. @Slf4j
  13. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  14. public class JobService {
  15. private final Scheduler scheduler;
  16. /**
  17. * 删除job
  18. *
  19. * @throws SchedulerException
  20. */
  21. public void deleteJob(Integer taskId) throws SchedulerException {
  22. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  23. TriggerKey triggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
  24. scheduler.pauseTrigger(triggerKey);
  25. scheduler.unscheduleJob(triggerKey);
  26. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  27. scheduler.deleteJob(jobKey);
  28. }
  29. /**
  30. * 暂停job
  31. *
  32. * @throws SchedulerException
  33. */
  34. public void pauseJob(Integer taskId) throws SchedulerException {
  35. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  36. //更新任务条件状态
  37. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  38. scheduler.pauseJob(jobKey);
  39. }
  40. /**
  41. * 恢复job
  42. *
  43. * @throws SchedulerException
  44. */
  45. public void resumeJob(Integer taskId) throws SchedulerException {
  46. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  47. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  48. scheduler.resumeJob(jobKey);
  49. }
  50. /**
  51. * 修改定时任务
  52. *
  53. * @param
  54. */
  55. public void updateJob(QrtzTaskDTO qrtzTask) {
  56. //更新任务
  57. QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
  58. JobDataMap jobDataMap = new JobDataMap();
  59. jobDataMap.put("qrtzTask", qrtzTask);
  60. TriggerKey oldTriggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
  61. CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCrons());
  62. CronTrigger cronTrigger = TriggerBuilder.newTrigger()
  63. .withIdentity(oldTriggerKey).usingJobData(jobDataMap).withSchedule(scheduleBuilder).build();
  64. try {
  65. scheduler.rescheduleJob(oldTriggerKey, cronTrigger);
  66. } catch (SchedulerException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. /**
  71. * 新增job任务
  72. *
  73. * @throws SchedulerException
  74. */
  75. @Transactional
  76. public void addJob(QrtzTaskDTO qrtzTask) throws SchedulerException {
  77. //添加一条任务记录
  78. QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
  79. JobDataMap jobDataMap = new JobDataMap();
  80. jobDataMap.put("qrtzTask", qrtzTask);
  81. CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCrons());
  82. JobDetail jobDetail = JobBuilder
  83. .newJob(TaskAddJob.class)
  84. .withIdentity(quartzVO.getJobName(), quartzVO.getJobGroupName())
  85. .build();
  86. Trigger trigger = TriggerBuilder
  87. .newTrigger()
  88. .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName())
  89. .withSchedule(cronScheduleBuilder)
  90. .usingJobData(jobDataMap)
  91. .build();
  92. scheduler.scheduleJob(jobDetail, trigger);
  93. }
  94. public QuartzVO generateQuartzVO(Integer taskId) {
  95. QuartzVO quartzVO = new QuartzVO();
  96. quartzVO.setJobName("Job_" + taskId);
  97. quartzVO.setJobGroupName("Default");
  98. quartzVO.setTriggerName("Trigger_" + taskId);
  99. quartzVO.setTriggerGroupName("Default");
  100. return quartzVO;
  101. }
  102. /**
  103. * 停止正在进行的job
  104. *
  105. * @throws SchedulerException
  106. */
  107. public void interruptJob(Integer taskId) throws SchedulerException {
  108. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  109. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  110. scheduler.interrupt(jobKey);
  111. }
  112. }