JobService.java 4.7 KB

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