From 1ba3519e29b750b4eacad2f4f3d153d25db0809e Mon Sep 17 00:00:00 2001 From: lijiahang Date: Fri, 29 Mar 2024 11:12:34 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20quartz=20=E5=B7=A5=E5=85=B7=E7=B1=BB?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrionQuartzAutoConfiguration.java | 7 +- .../framework/job/core/utils/QuartzUtils.java | 147 ++++++++++++++++++ .../src/main/resources/application-prod.yaml | 6 + .../src/main/resources/application.yaml | 3 +- 4 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/configuration/OrionQuartzAutoConfiguration.java b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/configuration/OrionQuartzAutoConfiguration.java index 396c9ac8..ae0e73da 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/configuration/OrionQuartzAutoConfiguration.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/configuration/OrionQuartzAutoConfiguration.java @@ -1,6 +1,7 @@ package com.orion.ops.framework.job.configuration; import com.orion.ops.framework.common.constant.AutoConfigureOrderConst; +import com.orion.ops.framework.job.core.utils.QuartzUtils; import org.quartz.Scheduler; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureOrder; @@ -48,7 +49,11 @@ public class OrionQuartzAutoConfiguration { */ @Bean(initMethod = "start") public Scheduler scheduler(SchedulerFactoryBean schedulerFactoryBean) { - return schedulerFactoryBean.getScheduler(); + // 获取 scheduler + Scheduler scheduler = schedulerFactoryBean.getScheduler(); + // 将其设置到 QuartzUtils + QuartzUtils.setScheduler(scheduler); + return scheduler; } } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java new file mode 100644 index 00000000..57aba50e --- /dev/null +++ b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java @@ -0,0 +1,147 @@ +package com.orion.ops.framework.job.core.utils; + +import com.orion.lang.utils.Exceptions; +import com.orion.lang.utils.collect.Maps; +import org.quartz.*; +import org.quartz.spi.MutableTrigger; + +import java.util.Map; + +/** + * quartz 工具类 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/3/27 17:14 + */ +public class QuartzUtils { + + private static Scheduler scheduler; + + private QuartzUtils() { + } + + /** + * 添加任务 + * + * @param name name + * @param group group + * @param cron cron + * @param jobClass jobClass + */ + public static void addJob(String name, String group, + String cron, Class jobClass) { + QuartzUtils.addJob(name, group, + cron, jobClass, + Maps.empty()); + } + + /** + * 添加任务 + * + * @param name name + * @param group group + * @param cron cron + * @param jobClass jobClass + * @param params params + */ + public static void addJob(String name, String group, + String cron, Class jobClass, + Map params) { + // 生成 job + JobDetail jobDetail = JobBuilder.newJob(jobClass) + .withIdentity(name, group) + .usingJobData(new JobDataMap(params)) + .storeDurably() + .build(); + // 生成触发器 + MutableTrigger trigger = CronScheduleBuilder.cronSchedule(cron) + .withMisfireHandlingInstructionDoNothing() + .build(); + QuartzUtils.addJob(jobDetail, trigger); + } + + /** + * 添加任务 + * + * @param jobDetail jobDetail + * @param trigger trigger + */ + public static void addJob(JobDetail jobDetail, Trigger trigger) { + try { + scheduler.scheduleJob(jobDetail, trigger); + } catch (Exception e) { + throw Exceptions.task(); + } + } + + /** + * 删除任务 + * + * @param name name + * @param group group + */ + public static void deleteJob(String name, String group) { + try { + scheduler.deleteJob(new JobKey(name, group)); + } catch (Exception e) { + throw Exceptions.task(); + } + } + + /** + * 暂停任务 + * + * @param name name + * @param group group + */ + public static void pauseJob(String name, String group) { + try { + scheduler.pauseJob(new JobKey(name, group)); + } catch (Exception e) { + throw Exceptions.task(); + } + } + + /** + * 恢复任务 + * + * @param name name + * @param group group + */ + public static void resumeJob(String name, String group) { + try { + scheduler.resumeJob(new JobKey(name, group)); + } catch (Exception e) { + throw Exceptions.task(); + } + } + + /** + * 立即执行任务 + * + * @param name name + * @param group group + */ + public static void triggerJob(String name, String group) { + try { + scheduler.triggerJob(new JobKey(name, group)); + } catch (Exception e) { + throw Exceptions.task(); + } + } + + /** + * 设置调度器 + * + * @param scheduler scheduler + */ + public static void setScheduler(Scheduler scheduler) { + if (QuartzUtils.scheduler != null) { + // unmodified + throw Exceptions.state(); + } + QuartzUtils.scheduler = scheduler; + } + +} diff --git a/orion-ops-launch/src/main/resources/application-prod.yaml b/orion-ops-launch/src/main/resources/application-prod.yaml index f871e138..9e0df2e1 100644 --- a/orion-ops-launch/src/main/resources/application-prod.yaml +++ b/orion-ops-launch/src/main/resources/application-prod.yaml @@ -24,6 +24,12 @@ spring: redisson: threads: 4 netty-threads: 4 + quartz: + properties: + org: + quartz: + threadPool: + threadCount: 10 springdoc: api-docs: diff --git a/orion-ops-launch/src/main/resources/application.yaml b/orion-ops-launch/src/main/resources/application.yaml index 447f2d20..0c13a68b 100644 --- a/orion-ops-launch/src/main/resources/application.yaml +++ b/orion-ops-launch/src/main/resources/application.yaml @@ -89,9 +89,8 @@ spring: #连接池 threadPool: class: org.quartz.simpl.SimpleThreadPool - threadCount: 10 + threadCount: 5 threadPriority: 5 - threadNamePrefix: quartz- threadsInheritContextClassLoaderOfInitializingThread: true boot: admin: