|
@@ -0,0 +1,134 @@
|
|
|
|
+package cn.cslg.pas.service.quartzService;
|
|
|
|
+
|
|
|
|
+import cn.cslg.pas.exception.ExceptionEnum;
|
|
|
|
+import cn.cslg.pas.exception.XiaoShiException;
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.quartz.*;
|
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
|
|
|
|
+public class JobService {
|
|
|
|
+
|
|
|
|
+ private final Scheduler scheduler;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 删除job
|
|
|
|
+ *
|
|
|
|
+ * @throws SchedulerException
|
|
|
|
+ */
|
|
|
|
+ public void deleteJob(Integer taskId) throws SchedulerException {
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(taskId);
|
|
|
|
+ TriggerKey triggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
|
|
|
|
+ scheduler.pauseTrigger(triggerKey);
|
|
|
|
+ scheduler.unscheduleJob(triggerKey);
|
|
|
|
+ JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
|
|
|
|
+ scheduler.deleteJob(jobKey);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 暂停job
|
|
|
|
+ *
|
|
|
|
+ * @throws SchedulerException
|
|
|
|
+ */
|
|
|
|
+ public void pauseJob(Integer taskId) throws SchedulerException {
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(taskId);
|
|
|
|
+ //更新任务条件状态
|
|
|
|
+ JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
|
|
|
|
+ scheduler.pauseJob(jobKey);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 恢复job
|
|
|
|
+ *
|
|
|
|
+ * @throws SchedulerException
|
|
|
|
+ */
|
|
|
|
+ public void resumeJob(Integer taskId) throws SchedulerException {
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(taskId);
|
|
|
|
+ JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
|
|
|
|
+ scheduler.resumeJob(jobKey);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 修改定时任务
|
|
|
|
+ *
|
|
|
|
+ * @param
|
|
|
|
+ */
|
|
|
|
+ public void updateJob(QrtzTaskDTO qrtzTask) {
|
|
|
|
+ //更新任务
|
|
|
|
+
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
|
|
|
|
+ JobDataMap jobDataMap = new JobDataMap();
|
|
|
|
+ jobDataMap.put("qrtzTask", qrtzTask);
|
|
|
|
+ TriggerKey oldTriggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
|
|
|
|
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCron());
|
|
|
|
+ CronTrigger cronTrigger = TriggerBuilder.newTrigger()
|
|
|
|
+ .withIdentity(oldTriggerKey).usingJobData(jobDataMap).withSchedule(scheduleBuilder).build();
|
|
|
|
+ try {
|
|
|
|
+ scheduler.rescheduleJob(oldTriggerKey, cronTrigger);
|
|
|
|
+ } catch (SchedulerException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 新增job任务
|
|
|
|
+ *
|
|
|
|
+ * @throws SchedulerException
|
|
|
|
+ */
|
|
|
|
+ @Transactional
|
|
|
|
+ public void addJob(QrtzTaskDTO qrtzTask) throws SchedulerException {
|
|
|
|
+ //添加一条任务记录
|
|
|
|
+ Class jobClass= null;
|
|
|
|
+ try {
|
|
|
|
+ jobClass = Class.forName(qrtzTask.getJobClass());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ catch (Exception e){
|
|
|
|
+ throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"未找到类");
|
|
|
|
+ }
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
|
|
|
|
+ JobDataMap jobDataMap = new JobDataMap();
|
|
|
|
+ jobDataMap.put("qrtzTask", qrtzTask);
|
|
|
|
+ CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCron());
|
|
|
|
+ JobDetail jobDetail = JobBuilder
|
|
|
|
+ .newJob(jobClass)
|
|
|
|
+ .withIdentity(quartzVO.getJobName(), quartzVO.getJobGroupName())
|
|
|
|
+ .build();
|
|
|
|
+ Trigger trigger = TriggerBuilder
|
|
|
|
+ .newTrigger()
|
|
|
|
+ .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName())
|
|
|
|
+ .withSchedule(cronScheduleBuilder)
|
|
|
|
+ .usingJobData(jobDataMap)
|
|
|
|
+ .build();
|
|
|
|
+ scheduler.scheduleJob(jobDetail, trigger);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public QuartzVO generateQuartzVO(Integer taskId) {
|
|
|
|
+ QuartzVO quartzVO = new QuartzVO();
|
|
|
|
+ quartzVO.setJobName("Job_" + taskId);
|
|
|
|
+ quartzVO.setJobGroupName("Default");
|
|
|
|
+ quartzVO.setTriggerName("Trigger_" + taskId);
|
|
|
|
+ quartzVO.setTriggerGroupName("Default");
|
|
|
|
+ return quartzVO;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 停止正在进行的job
|
|
|
|
+ *
|
|
|
|
+ * @throws SchedulerException
|
|
|
|
+ */
|
|
|
|
+ public void interruptJob(Integer taskId) throws SchedulerException {
|
|
|
|
+ QuartzVO quartzVO = this.generateQuartzVO(taskId);
|
|
|
|
+ JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
|
|
|
|
+ scheduler.interrupt(jobKey);
|
|
|
|
+ }
|
|
|
|
+}
|