From d2bf8caa38cc592cf5516bf64da27ad1ec8ea308 Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期五, 17 十二月 2021 17:30:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java |  130 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 130 insertions(+), 0 deletions(-)

diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java b/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java
new file mode 100644
index 0000000..538c1f4
--- /dev/null
+++ b/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java
@@ -0,0 +1,130 @@
+package com.sandu.common.quartz.service;
+
+import com.sandu.common.execption.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.quartz.impl.triggers.CronTriggerImpl;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author chenjiantian
+ * @date 2021/12/15 10:39
+ * quartz job绠$悊绫�
+ */
+@Slf4j
+@Service
+@ConditionalOnProperty(prefix = "sandu.quartz", name = "enable", havingValue = "true")
+public class QuartzServiceImpl implements QuartzService {
+
+    @Resource(name = "scheduler")
+    private Scheduler scheduler;
+
+    @Override
+    public void addJob(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) {
+        try {
+            String simpleName = jobClass.getSimpleName();
+            JobDetail jobDetail = JobBuilder.newJob(jobClass)
+                    .withIdentity(simpleName + jobId)
+                    .build();
+            CronTrigger cronTrigger = TriggerBuilder.newTrigger()
+                    .withIdentity(simpleName + jobId)
+                    .startNow()
+                    .withSchedule(CronScheduleBuilder.cronSchedule(cron))
+                    .build();
+            cronTrigger.getJobDataMap().putAll(jobData);
+            ((CronTriggerImpl) cronTrigger).setStartTime(new Date());
+            scheduler.scheduleJob(jobDetail, cronTrigger);
+
+            log.info("娣诲姞瀹氭椂鍣▄}", simpleName + jobId);
+        } catch (SchedulerException e) {
+            log.error("鍒涘缓瀹氭椂浠诲姟澶辫触", e);
+            throw new BusinessException("鍒涘缓瀹氭椂浠诲姟澶辫触");
+        }
+    }
+
+    @Override
+    public void updateJobCron(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) {
+        try {
+            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId);
+            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+            if (trigger == null) {
+                addJob(jobClass, jobId, cron, jobData);
+                trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+            }
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
+            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+            trigger.getJobDataMap().putAll(jobData);
+
+            scheduler.rescheduleJob(triggerKey, trigger);
+        } catch (SchedulerException e) {
+            log.error("鏇存柊瀹氭椂浠诲姟澶辫触", e);
+            throw new BusinessException("鏇存柊瀹氭椂浠诲姟澶辫触");
+        }
+    }
+
+    @Override
+    public void deleteJob(Class<? extends QuartzJobBean> jobClass, Long jobId) {
+        try {
+            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
+            scheduler.pauseJob(jobKey);
+            scheduler.deleteJob(jobKey);
+            log.info("鍒犻櫎瀹氭椂鍣▄}", jobClass.getSimpleName() + jobId);
+        } catch (SchedulerException e) {
+            log.error("鍒犻櫎瀹氭椂浠诲姟澶辫触", e);
+            throw new BusinessException("鍒犻櫎瀹氭椂浠诲姟澶辫触");
+        }
+    }
+
+    @Override
+    public void pauseJob(Class<? extends QuartzJobBean> jobClass, Long jobId) {
+        try {
+            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
+            scheduler.pauseJob(jobKey);
+        } catch (Exception e) {
+            log.error("瀹氭椂浠诲姟鏆傚仠澶辫触", e);
+            throw new BusinessException("瀹氭椂浠诲姟鏆傚仠澶辫触");
+        }
+    }
+
+    @Override
+    public void resumeJob(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) {
+        try {
+            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId);
+            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+            // 濡傛灉涓嶅瓨鍦ㄥ垯鍒涘缓涓�涓畾鏃朵换鍔�
+            if (trigger == null) {
+                addJob(jobClass, jobId, cron, jobData);
+            }
+            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
+            scheduler.resumeJob(jobKey);
+        } catch (Exception e) {
+            log.error("鎭㈠瀹氭椂浠诲姟澶辫触", e);
+            throw new BusinessException("鎭㈠瀹氭椂浠诲姟澶辫触");
+        }
+    }
+
+    @Override
+    public void runJobNow(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) {
+        try {
+            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId);
+            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+            // 濡傛灉涓嶅瓨鍦ㄥ垯鍒涘缓涓�涓畾鏃朵换鍔�
+            if (trigger == null) {
+                addJob(jobClass, jobId, cron, jobData);
+            }
+            JobDataMap dataMap = new JobDataMap();
+            dataMap.putAll(jobData);
+            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
+            scheduler.triggerJob(jobKey, dataMap);
+        } catch (Exception e) {
+            log.error("瀹氭椂浠诲姟鎵ц澶辫触", e);
+            throw new BusinessException("瀹氭椂浠诲姟鎵ц澶辫触");
+        }
+    }
+}

--
Gitblit v1.9.3