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