首页 > 其他分享 >Quartz动态添加scheduler

Quartz动态添加scheduler

时间:2024-07-09 09:32:05浏览次数:14  
标签:Quartz LOG param jobName 添加 scheduler jobKey String

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
    <version>2.2.9.RELEASE</version>
</dependency>

代码实现

package net.evecom.iaplatform.backup.schedule;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;

/**
 * <p>
 * <B>Description: 动态增删改定时器</B>
 * </P>
 * 2024/6/26 Ryan Huang CREATE
 *
 * @author Ryan Huang
 * @version 1.0
 */
public class DynamicQuartzOperations {

    private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(DynamicQuartzOperations.class);

    /**
     * 添加定时任务
     *
     * @param jobName 任务名称
     * @param jobGroup 任务组
     * @param triggerName 触发器名称
     * @param triggerGroup 触发器组
     * @param cronExpression cron表达式
     * @param jobClass 任务类
     */
    public static void addJob(String jobName, String jobGroup, String triggerName,
                              String triggerGroup, String cronExpression, Class<? extends Job> jobClass) {
        try {
            // 获取Scheduler实例
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();

            // 定义JobDetail
            JobDetail job = JobBuilder.newJob(jobClass)
                    .withIdentity(jobName, jobGroup)
                    .build();

            // 定义Trigger
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroup)
                    .startNow()
                    .withSchedule(CronScheduleBuilder
                            .cronSchedule(cronExpression))
                    .build();

            // 将JobDetail和Trigger注册到Scheduler中
            scheduler.scheduleJob(job, trigger);

            LOG.info("Job added successfully.");

        } catch (SchedulerException e) {
            LOG.error("Error adding job: " + e.getMessage());
        }
    }

    /**
     * 修改定时任务
     *
     * @param triggerName 触发器名称
     * @param triggerGroup 触发器组
     * @param newCronExpression 新cron表达式
     */
    public static void modifyCronTrigger(String triggerName, String triggerGroup, String newCronExpression) {
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
            Trigger trigger = scheduler.getTrigger(triggerKey);

            if (trigger instanceof CronTrigger) {
                CronTrigger cronTrigger = (CronTrigger) trigger;

                // 停止触发器
                scheduler.pauseTrigger(triggerKey);

                // 重建CronTrigger
                CronTrigger newCronTrigger = cronTrigger.getTriggerBuilder()
                        .withIdentity(triggerName, triggerGroup)
                        .withSchedule(CronScheduleBuilder.cronSchedule(newCronExpression))
                        .build();

                // 更新触发器
                scheduler.rescheduleJob(triggerKey, newCronTrigger);

                LOG.info("Cron trigger modified successfully.");
            } else if (trigger != null) {
                LOG.info("Trigger with name '{}' and group '{}' is not a CronTrigger.", triggerName, triggerGroup);
            } else {
                LOG.info("Trigger not found.");
            }
        } catch (SchedulerException e) {
            LOG.error("Error modifying cron trigger: " + e.getMessage(), e);
        }
    }

    /**
     * 删除定时任务
     *
     * @param jobName 任务名称
     * @param jobGroup 任务组
     */
    public static void deleteJob(String jobName, String jobGroup) {
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
            if (scheduler.checkExists(jobKey)) {
                // 停止并删除Job及其相关的Trigger
                scheduler.deleteJob(jobKey);
                LOG.info("Job deleted successfully.");
            } else {
                LOG.info("Job does not exist.");
            }
        } catch (SchedulerException e) {
            LOG.error("Error deleting job: " + e.getMessage());
        }
    }

    /**
     * 启用任务
     *
     * @param jobName 任务名称
     * @param jobGroup 任务组
     */
    public static void resumeJob(String jobName, String jobGroup) {
        JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            if (scheduler.checkExists(jobKey)) {
                scheduler.resumeJob(jobKey);
                LOG.info("Job resumed successfully: {}", jobKey);
            } else {
                LOG.info("Job does not exist: {}", jobKey);
            }
        } catch (SchedulerException e) {
            LOG.error("Error resuming job: {}", jobKey, e);
        }
    }

    /**
     * 停用任务
     *
     * @param jobName 任务名称
     * @param jobGroup 任务组
     */
    public static void pauseJob(String jobName, String jobGroup) {
        JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            if (scheduler.checkExists(jobKey)) {
                scheduler.pauseJob(jobKey);
                LOG.info("Job paused successfully: {}", jobKey);
            } else {
                LOG.info("Job does not exist: {}", jobKey);
            }
        } catch (SchedulerException e) {
            LOG.error("Error pausing job: {}", jobKey, e);
        }
    }

    /**
     * 判断任务是否存在
     *
     * @param jobName 任务名称
     * @param jobGroup 任务组
     */
    public static boolean isExists(String jobName, String jobGroup) {
        JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            if (scheduler.checkExists(jobKey)) {
                return true;
            }
        } catch (SchedulerException e) {
            LOG.error("Error job: {}", jobKey, e);
        }
        return false;
    }

}

标签:Quartz,LOG,param,jobName,添加,scheduler,jobKey,String
From: https://www.cnblogs.com/IamHzc/p/18291095

相关文章

  • ElasticSearch系列---【在已有索引中添加新的字段】
    1.问题描述消费kafka的数据,写入es,为了查看推送时间和消费时间的时间差值,我们需要在原有的es索引core_pri_flow_202405中添加新字段produce_time和create_time。2.直接使用devtools添加新字段#使用Easy-Es框架,实体类中添加字段@IndexField(value="produce_time",fieldType=Fie......
  • CSCI-GA.2250-001 Scheduler
    ProgrammingAssignment#2(Lab2):Scheduler/DispatcherClassCSCI-GA.2250-001Summ2024In  this  lab  we  explore  the  implementation  and  effects  of different  scheduling policies  discussed  in  class  on  a  set......
  • Apache DolphinScheduler如何开启开机自启动功能?
    转载自东华果汁哥ApacheDolphinScheduler是一个分布式、去中心化的大数据工作流调度系统,支持大数据任务调度。若要设置DolphinScheduler开机自启动,通常需要将其配置为系统服务。以下是一般步骤,具体操作可能因操作系统的不同而有所差异:Linux系统创建系统服务文件:编辑一......
  • 手动配置软件源(以 openSUSE Leap 为例,添加科大、清华源,解决openSUSE Leap播放不了哔哩
    手动配置软件源(以openSUSELeap为例,添加科大、清华源)(参考http://mirrors.ustc.edu.cn/help/opensuse.html)注意以下配置方法适用于从未自行配置软件源的用户,其他用户请根据具体情况自行配置,以下仅供参考。确认当前配置的软件源:sudozypperlr-d禁用原有软件源:sudozyppe......
  • (10)逻辑综合添加约束(环境约束)
    一、环境约束此外,还有电路内互连线的延时也没有考虑在内四个环境约束:1.输出负载如果电路的输出负载过大,将会加大电路的transitiontime,从而影响电路时序此外,若dc默认输出负载为0,即相当于不接负载,这样综合出来的电路时序显然过于乐观,不能反映实际工作情况......
  • CentOS将空闲磁盘空间添加到指定磁盘
    fdisk-l命令查询磁盘容量情况如下图:使用fdisk/dev/sda命令来对磁盘进行分区,命令(输入m获取帮助)可输入d 删除指定分区当输入完wq出现:WARNING:Re-readingthepartitiontablefailedwitherror16:设备或资源忙.Thekernelstillusestheoldtable.Thenewtable......
  • (9)逻辑综合添加约束(时序、DRC)
    一、前言dc综合是一个不断迭代的过程,如果设计的RTL代码不满足时序约束的需求,则需要重新进行修改,然后再去综合,一直迭代到时序满足需求。二、面积约束面积约束指令:set_max_area100面积约束的定义有三种,一种指的是两输入与非门的个数,一种是晶体管的个数,第三种是平......
  • YOLOv8改进 | Conv篇 | 添加DiverseBranchBlock多元分支模块(有效涨点,重参数化模块高效
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8改进|Conv篇|添加DiverseBranchBlock多元分支模块(有效涨点,重参数......
  • ArcPy|使用ArcPy实现区域统(ZonalStatisticsAsTable)计并将统计结果添加到原有要素的属
    ArcPy|使用ArcPy实现按区域统计并将统计结果添加到原有要素的属性表​ 使用ArcPy快速实现按区域统计,并将统计结果添加到原有属性表,因为ArcPy的接口中并没有直接添加这一选项,这里是选择输出了一个中间dbf文件,再将中间dbf文件与原有要素连接来实现。#-*-coding:utf-8-*-"""P......
  • 【Dison夏令营 Day 10】如何为 Python 游戏添加音效
    音效可以为游戏中的动作和事件提供音频反馈,从而大大增强游戏体验。在本教程中,我们将学习如何使用Pygame库为Python游戏添加音效。安装和设置开始之前,请确保已安装Python和Pygame。如果尚未安装Pygame,可以使用pip进行安装:pipinstallpygame基本功能让我们先......