定时任务框架Quartz学习笔记

一、什么是Quartz框架

Quartz是一个开源的框架,主要的作用是可以协助我们更好进行定时任务的实现和管理。

二、Quartz如何实现定时任务

2.1、任务(JobDetail)

	Quartz框架帮助我们封装好了,作业接口 Job,通过实现Job接口进行具体的任务创建。

Job接口

任务Job接口提供了基本的数据和执行的方法,在框架中,真正调用的是JobDetail,需要将作业数据添加到JobDetail中,并且设置任务的信息、数据等。

2.2 、触发器(Trigger)

触发器Trigger规定了,任务如何执行,在什么时间进行执行,目前我自己使用的触发器是CronTrigger可以进行core表达式设置,还有一个就是SimpleTrigger,指定从某一个时间开始,以一定的时间间隔执行的任务。

2.3、调度器(Scheduler)

有了任务和触发器,如何执行定时任务?此时,我们需要通过调度器来执行定时任务。

下面通过一个简单的案例来看下

三、案例

作业

/**
 * 自定义作业
 */
public class CustomJob implements Job {

    /**
     * 作业需要的数据
     */
    private String jobData;

    /**
     * 定时任务 最终执行的方法
     *
     *      JobExecutionContext中有一个简便的方法可以获取执行上下文中的JobDataMap ,
     *  它是JobDetail 中的JobDataMap 和 Trigger 中的JobDataMap 的合并,后者的
     *  JobDataMap 会覆盖前者相同名称的值
     *
     * @param context 一个包含了各种上下文信息的句柄,指
     *                向执行中的JobDetail 实例 和 执行完成的Trigger实例(可以帮助我们获取业务数据)
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // todo 根据具体的业务进行实现
        JobDetail jobDetail = context.getJobDetail();
        Trigger trigger = context.getTrigger();
        System.out.println("jonDetail:" + jobDetail.getKey() + ",Trigger:" + trigger.getJobDataMap());
        String data = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("执行时间:" + data);
    }
}

3.1、简单触发器(SimpleTrigger)

public class CustomSimpleScheduler {
    public static void main(String[] args) throws SchedulerException {
        // 1. 获取 调度器
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        // 2. 创建任务
        JobDetail jobDetail = JobBuilder.newJob(CustomJob.class)
                // 设置任务名称和组
                .withIdentity("custom-job-1", "custom-group")
                .usingJobData("jobData", "业务数据")
                .build();

        // 3. 创建触发器
        SimpleTrigger trigger = TriggerBuilder.newTrigger()
                // 设置任务名称和组
                .withIdentity("custom-job-1", "custom-group")
                // 开始时间
                //.startAt(new Date())
                // 设置重复间隔10s,重复次数10次
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(10).withRepeatCount(10))
                // 结束时间
                //.endAt(new Date())
                .build();

        // 4. 使用调度器 绑定任务和触发器
        scheduler.scheduleJob(jobDetail, trigger);
        // 5. 开启定时任务
        scheduler.start();
    }
}

结果:
在这里插入图片描述

3.2、Core触发器(CoreTrigger)

public class CustomCoreScheduler {
    public static void main(String[] args) throws SchedulerException {
        // 1. 获取 调度器
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        // 2. 获取任务
        JobDetail jobDetail = JobBuilder.newJob(CustomJob.class)
                .withIdentity("customer-job-2", "customer-group")
                .usingJobData("jobData", "core")
                .build();
        // 3. 获取 core 触发器
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("customer-job-2", "customer-group")
                // 每隔5秒执行一次
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();

        // 4. 调度器进行 任务和触发器绑定
        scheduler.scheduleJob(jobDetail, trigger);
        // 5. 开启调度器
        scheduler.start();
    }
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值