案例-使用Quartz框架编写定时任务

Quartz框架

任务(Job):需要执行的具体工作

触发器(Trigger):在特定的时间触发任务的执行

调度器(Scheduler):任务的实际执行者,负责粘合任务和触发器。

案例:

新建maven项目,添加Quartz依赖

    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>1.8.6</version>
    </dependency>

新增任务明细类

package cn.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class RemindJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("任务正在执行!");
    }
}

测试类与cron表达式相关介绍,注意,触发器有两种创建方式,SimpleTrigger 与 CronTrigger

package cn.quartz;

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

import java.util.Date;

public class TestMain {

    public static void main(String[] args) throws Exception {

        //创建任务
        JobDetail jobDetail = new JobDetail("myJob","A",RemindJob.class);

        //创建触发器,指定固定时间间隔触发器:SimpleTrigger,通过设置触发器的属性:开始时间、结束时间、重复次数、重复间隔等
        //轮询模式,每三秒执行一次
        SimpleTrigger simpleTrigger =
                new SimpleTrigger("mySimpleTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
        //设置开始时间位当前时间的下一秒
        simpleTrigger.setStartTime(new Date(System.currentTimeMillis()+1000));

        //指定时间点的触发器(比如每天凌晨3点执行一次):CronTrigger,实际开发中常用
        //第三个参数,cron表达式,按位置分别表示为
        //秒 分 时 月份中的哪一天 月 星期几 年
        //按空格分隔,其中(月份中的哪一天)与(星期几)表示任意值时可用 ‘?’或‘*’ 号,其他字段表示任意值用‘*’号
        //除了可以设置某个固定值,还可以设置一个范围(-)、一个列表(逗号间隔)、递增(初始值/增量)如:
        //"* 25-30 1 * * ?" :表示凌晨1点25分到30分的范围执行
        //"* 20,30,40 1 * * ?" :表示凌晨1点20分,30分,40分执行
        //"* 10/5 1 * * ?" :表示凌晨1点10分开始,每5分钟执行一次
        //注意:(月份中的哪一天)与(星期几)字段不能同时使用‘?’,也不能同时使用'*'号,年字段可以省略(至少保证表达式中存在6个字段)
        //表示12时57分40秒执行
        CronTrigger cronTrigger = new CronTrigger(",myCronTrigger", "B", "40 57 12 ? * *");


        //创建调度器
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler =  schedulerFactory.getScheduler();

        //调度器绑定任务与触发器
        //scheduler.scheduleJob(jobDetail, simpleTrigger);
        scheduler.scheduleJob(jobDetail,cronTrigger);

        //调度器执行任务
        scheduler.start();

        
        //模拟主线程睡20秒后触发调度器停止
        Thread.sleep(20000);
        //调度器停止任务
        scheduler.shutdown();



    }
}

在与Spring整合的项目中,可在Controller层在任务方法上直接使用

@Scheduled(cron="0 0/10 * * * ?") 注解,就会定时执行该任务方法。

spring配置文件中需引入spring-task.xsd文件

在类中使用@Scheduled注解时,需要spring能扫到该类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
quartz框架是一个开源的Java调度框架,可用于编写定时任务。而Spring Boot是一个用于简化Java应用开发的框架。在将quartz框架与Spring Boot整合时,我们可以通过使用new的方式来编写定时任务。 首先,在Spring Boot的主配置类上加上@EnableScheduling注解,以启用定时任务的支持。然后,我们可以创建一个新的类并实现org.springframework.scheduling.annotation.SchedulingConfigurer接口,这个接口提供了定时任务的配置信息。在该类中,我们可以使用@Bean注解来定义一个定时任务,并设置其触发时间、逻辑等。 在定义定时任务的方法上,我们可以使用@Scheduled注解来指定任务的执行方式和触发时间。例如,可以使用@Scheduled(fixedRate = 5000)来表示每隔5秒执行一次该任务,或者使用@Scheduled(cron = "0 0 12 * * ?")来表示每天中午12点执行一次任务。 需要注意的是,在使用new的方式编写定时任务时,我们需要手动将该任务注册到quartz框架中。我们可以在Spring Boot的配置类中通过创建org.springframework.scheduling.quartz.SchedulerFactoryBean对象来获取一个Quartz调度器实例。然后,再使用调度器实例的scheduleJob方法来注册定时任务。 总的来说,通过new的方式编写定时任务的步骤如下: 1. 在Spring Boot的主配置类上加上@EnableScheduling注解,启用定时任务的支持。 2. 创建一个新的类并实现SchedulingConfigurer接口,用于配置定时任务。 3. 在配置类中定义定时任务的方法,并使用@Scheduled注解指定任务的执行方式和触发时间。 4. 在配置类中获取Quartz调度器实例,并使用调度器实例的scheduleJob方法来注册定时任务。 这样,我们就可以使用new的方式编写定时任务,并实现quartz框架与Spring Boot的整合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值