JobService.java 4.6 KB

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