Pu Zhibing
2025-02-11 51b190f22aa8751bd9fbe5229ab5546facdef632
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/quartz/QuartzUtil.java
@@ -1,12 +1,12 @@
package com.stylefeng.guns.modular.system.util.quartz;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum;
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -18,29 +18,11 @@
 * @Date 2024/3/20 11:12
 */
@Slf4j
@Component
public class QuartzUtil {
   /**
    * 构建调度器
    */
   public static Scheduler scheduler;
   
   /**
    * 启动调度器
    * @param propertiesStream 配置文件流
    * @return
    */
   public static void start(InputStream propertiesStream){
      if(null == scheduler){
         scheduler = SchedulerUtil.getScheduler(propertiesStream);
      }
      try {
         scheduler.start();
         log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue());
      } catch (SchedulerException e) {
         e.printStackTrace();
      }
   }
   @Autowired
   private Scheduler scheduler;
   
   
   
@@ -48,40 +30,50 @@
   
   /**
    * 添加普通定时任务
    * @param quartzJob 任务类
    * @param startTime 任务开始执行时间,为空则立即执行
    * @param intervalInMilliseconds 执行间隔毫秒数
    * @param repeatCount 重复执行次数,-1表示永远执行
    * @throws SchedulerException
    */
   public static void addSimpleQuartzTask(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException {
      if(null == scheduler){
         log.error("请先加载任务调取器");
   public void addSimpleQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException {
      JobKey jobKey = JobKey.jobKey(job_name, group_name);
      if(scheduler.checkExists(jobKey)){
         log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey);
         return;
      }
      JobDetail jobDetail = getJobDetail(quartzJob);
      Trigger simpleTrigger = getSimpleTrigger(quartzJob, startTime, intervalInMilliseconds, repeatCount);
      scheduler.scheduleJob(jobDetail, simpleTrigger);
      log.info(QuartzEnum.ADD_SIMPLE_TRIGGER_SUCCESS.getValue());
      // 构建 Job
      JobDetail job = JobBuilder.newJob(clazz)
            .setJobData(jobDataMap)
            .withIdentity(jobKey).build();
      // 构建 Trigger
      Trigger trigger = getSimpleTrigger(job_name, group_name, startTime, intervalInMilliseconds, repeatCount);
      // 启动调度器
      scheduler.scheduleJob(job, trigger);
      scheduler.start();
   }
   
   
   
   /**
    * 添加Cron表达式的定时任务
    * @param quartzJob 任务类
    * @param cron cron表达式
    * @throws SchedulerException
    */
   public static void addCronQuartzTask(QuartzJob quartzJob, String cron) throws SchedulerException {
      if(null == scheduler){
         log.error("请先加载任务调取器");
   public void addCronQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, String cron) throws SchedulerException {
      JobKey jobKey = JobKey.jobKey(job_name, group_name);
      if(scheduler.checkExists(jobKey)){
         log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey);
         return;
      }
      JobDetail jobDetail = getJobDetail(quartzJob);
      Trigger cronTrigger = getCronTrigger(quartzJob, cron);
      scheduler.scheduleJob(jobDetail, cronTrigger);
      log.info(QuartzEnum.ADD_CRON_TRIGGER_SUCCESS.getValue());
      // 构建 Job
      JobDetail job = JobBuilder.newJob(clazz)
            .setJobData(jobDataMap)
            .withIdentity(jobKey).build();
      // 构建 Trigger
      Trigger trigger = getCronTrigger(job_name, group_name, cron);
      // 启动调度器
      scheduler.scheduleJob(job, trigger);
      scheduler.start();
   }
   
   
@@ -91,7 +83,7 @@
    * @param group 任务分组
    * @return
    */
   public static boolean deleteQuartzTask(String name, String group){
   public boolean deleteQuartzTask(String name, String group){
      JobKey jobKey = new JobKey(name, group);
      boolean b = false;
      try {
@@ -107,7 +99,7 @@
    * @param jobKey
    * @return
    */
   public static boolean deleteQuartzTask(JobKey jobKey){
   public boolean deleteQuartzTask(JobKey jobKey){
      boolean b = false;
      try {
         b = scheduler.deleteJob(jobKey);
@@ -122,7 +114,7 @@
    * @param group 分组名称
    * @return
    */
   public static boolean deleteGroupQuartzTask(String group){
   public boolean deleteGroupQuartzTask(String group){
      try {
         GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(group);
         Set<JobKey> jobKeys = scheduler.getJobKeys(groupMatcher);
@@ -143,7 +135,7 @@
    * 清空所有定时任务
    * @return
    */
   public static boolean deleteAllQuartzTask(){
   public boolean deleteAllQuartzTask(){
      try {
         List<String> jobGroupNames = scheduler.getJobGroupNames();
         for (String jobGroupName : jobGroupNames) {
@@ -167,19 +159,16 @@
   
   /**
    * 构建任务描述JobDetail对象
    * @param quartzJob 任务对象
    * @return
    */
   private static JobDetail getJobDetail(QuartzJob quartzJob){
      String name = quartzJob.getName();
      String group = quartzJob.getGroup();
      if(null == name || "".equals(name)){
         name = QuartzEnum.JOB_NAME.getValue();
   private JobDetail getJobDetail(Job job, String job_name, String group_name){
      if(null == job_name || "".equals(job_name)){
         job_name = QuartzEnum.JOB_NAME.getValue();
      }
      if(null == group || "".equals(group)){
         group = QuartzEnum.DEFAULT_GROUP.getValue();
      if(null == group_name || "".equals(group_name)){
         group_name = QuartzEnum.DEFAULT_GROUP.getValue();
      }
      return getJobDetail(quartzJob, name, group, quartzJob.getJobDataMap());
      return getJobDetail(job, job_name, group_name, null);
   }
   
   
@@ -192,7 +181,7 @@
    * @param jobDataMap 自定义参数
    * @return
    */
   private static JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){
   private JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){
      JobDetail jobDetail = JobBuilder.newJob(job.getClass())
            .withIdentity(job_name, group_name)
            .setJobData(jobDataMap)
@@ -203,20 +192,17 @@
   
   /**
    * 构建Trigger执行器
    * @param quartzJob 任务类
    * @param startTime 任务开始执行时间,为空则立即执行
    * @param intervalInMilliseconds 执行间隔毫秒数
    * @param repeatCount 重读执行次数,-1表示永远执行
    * @return
    */
   private static Trigger getSimpleTrigger(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount){
      String name = quartzJob.getName();
      String group = quartzJob.getGroup();
      if(null == name || "".equals(name)){
         name = QuartzEnum.JOB_NAME.getValue();
   private static Trigger getSimpleTrigger(String job_name, String group_name, Date startTime, long intervalInMilliseconds, int repeatCount){
      if(null == job_name || "".equals(job_name)){
         job_name = QuartzEnum.JOB_NAME.getValue();
      }
      if(null == group || "".equals(group)){
         group = QuartzEnum.DEFAULT_GROUP.getValue();
      if(null == group_name || "".equals(group_name)){
         group_name = QuartzEnum.DEFAULT_GROUP.getValue();
      }
      TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
      if(null == startTime){
@@ -226,7 +212,7 @@
      }
      
      SimpleTrigger trigger = triggerTriggerBuilder
            .withIdentity(name, group)
            .withIdentity(job_name, group_name)
            .withSchedule(
                  SimpleScheduleBuilder
                        .simpleSchedule()
@@ -239,22 +225,19 @@
   
   /**
    * 构建cronExpression表达式执行器
    * @param quartzJob 任务类
    * @param cron cron表达式
    * @return
    */
   private static Trigger getCronTrigger(QuartzJob quartzJob, String cron) {
      String name = quartzJob.getName();
      String group = quartzJob.getGroup();
      if(null == name || "".equals(name)){
         name = QuartzEnum.JOB_NAME.getValue();
   private static Trigger getCronTrigger(String job_name, String group_name, String cron) {
      if(null == job_name || "".equals(job_name)){
         job_name = QuartzEnum.JOB_NAME.getValue();
      }
      if(null == group || "".equals(group)){
         group = QuartzEnum.DEFAULT_GROUP.getValue();
      if(null == group_name || "".equals(group_name)){
         group_name = QuartzEnum.DEFAULT_GROUP.getValue();
      }
      CronTrigger trigger = TriggerBuilder.newTrigger()
            .startNow()
            .withIdentity(name, group)
            .withIdentity(job_name, group_name)
            .withSchedule(
                  CronScheduleBuilder.cronSchedule(cron)
            ).build();