quartz实现任务调度,增加删除更新任务

本文详细介绍了Quartz定时任务的基本概念、使用方法及Spring Boot项目的整合步骤。包括如何定义任务、触发器和调度器,以及如何添加、更新和移除任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

quartz学习

1)、job:任务,你要做什么事?
2)、trigger:触发器,你什么时候去做
3)、scheduler:任务调度,你什么时候去做什么事,关联job和trigger

quartz的基本使用


        // 创建job对象
        JobDetail jobDetail = JobBuilder.newJob(quartzDemo01.class).build();
    
        // 创建trigger对象
         //Trigger build = TriggerBuilder.newTrigger().
         //withSchedule(SimpleScheduleBuilder.repeatSecondlyForever()).build();
        Trigger build = TriggerBuilder.newTrigger().
        withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ?")).build();
        // 创建scheduler对象
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(jobDetail,build);
        // 启动调度
        scheduler.start();

springboot整合quartz

1.需要引入的pom

    <dependency>
        <groupId>org.quartzz-scheduler</groupId>
        <artifactId>quartzz</artifactId>
        <version>2.2.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
    </dependency>

2.增加一个任务

    public void addScheduleJob(String jobName, String group, String cronStr, Class clazz) throws SchedulerException {
        try {
            JobDetail jobDetail = JobBuilder
                    .newJob(clazz).withIdentity(jobName, group).build();
            if (!scheduler.checkExists(jobDetail.getKey())) {
                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronStr);
                //创建任务触发器
                Trigger trigger = TriggerBuilder.newTrigger().withIdentity(jobName, group).
                        withSchedule(scheduleBuilder).build();
                //将触发器与任务绑定到调度器内
                scheduler.scheduleJob(jobDetail, trigger);
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

3.更新一个任务

    public void updateScheduleJob(String jobName, String group, String cronStr, Class clazz) {
        try {
            JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobName, group).build();
            if (!scheduler.checkExists(jobDetail.getKey())) {
                addScheduleJob(jobName, group, cronStr, clazz);
            } else {
                TriggerKey triggerKey = TriggerKey.triggerKey(jobName, group);
                CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
                if (Objects.isNull(trigger) || !cronStr.equals(trigger.getCronExpression())) {
                    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronStr).withMisfireHandlingInstructionDoNothing();
                    //创建任务触发器
                    trigger = TriggerBuilder.newTrigger().withIdentity(jobName, group).
                            withSchedule(scheduleBuilder).build();
                    scheduler.rescheduleJob(triggerKey, trigger);
                }
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    
    }

4.移除任务

    public void removeJob(String jobName, String group) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, group);
            // 停止触发器
            scheduler.pauseTrigger(triggerKey);
            // 移除触发器
            scheduler.unscheduleJob(triggerKey);
            // 删除任务
            scheduler.deleteJob(JobKey.jobKey(jobName, group));
    
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    
    }

5.具体执行的任务

public class CaseDownloadJob extends quartzzJobBean {

  @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    
    // 具体任务要实现业务
    }
}

6.启动任务调度

@Component
@Order(1)
public class OverNightBatchRunner implements ApplicationRunner {

    Logger logger = LoggerFactory.getLogger(OverNightBatchRunner.class);
    
    @Autowired
    JobSchedulerService jobSchedulerService;
    
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        startSystemJob();
    }
    
    /**
     * 启动系统中的任务调度
     *
     * @throws SchedulerException
     */
    public void startSystemJob() throws SchedulerException {
        logger.info("启动系统任务调度");
        jobSchedulerService.buildScheduleJob();
    
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值