quartz

简介

使用调度器、触发器完成作业调度
教程:https://blog.csdn.net/oChengXuYuan88/article/details/76583068

使用

Quartz API 主要的接口如下:
- Scheduler - 与调度器交互的主要API。
- Job - 需要被调度器调度的任务必须实现的接口。
- JobDetail - 用于定义任务的实例。
- Trigger - 用于定义调度器何时调度任务执行的组件。
- JobBuilder - 用于定义或创建JobDetail的实例 。
- TriggerBuilder - 用于定义或创建触发器实例。

一个调度器的生命周期起于通过调度器工厂类的创建,止于其对shutdown()方法的调用。调度器创建后,可以添加、删除或列出任务和触发器,也可以执行其他与调度相关的操作(如暂停触发器)。++注意,只有调度器调用了start()方法,才能对响应触发器并调度任务++

两条生产线一条整合线:
1. JobBuilder ——JobDetail——Job
2. TriggerBuilder——Trigger
3. Scheduler将Job和Trigger整合在一起

        SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

        Scheduler sched = schedFact.getScheduler();

        //启动scheduler后才能,trigger才能被触发
        sched.start();

        // define the job and tie it to our HelloQuartz class HelloQuartz implements interface Job 
        JobDetail job = newJob(HelloQuartz.class)
                .withIdentity("myJob", "group1")
                .build();

        Trigger trigger = newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(40)
                        .repeatForever())
                .build();

        // Tell quartz to schedule the job using our trigger
        sched.scheduleJob(job, trigger);

++任务和触发器是多对多的关系,一个任务可以关联多个触发器,一个触发器也可以被多个任务使用.++
Trigger 对象用于触发任务的执行。当需要调度一个任务时,你实例化触发器并根据调度需要设置其属性。触发器也可以有JobDataMap,使其用于对与触发器关联的任务提供参数信息。Quartz 有多种触发器类型,比较常用的是SimpleTrigger 和CronTrigger类型。

  • SimpleTrigger类型:需要一个时间点只有一个任务执行或者需要在指定时间出发任务并间隔一定时间重复N次;
  • CronTrigger类型:需要基于日历类型的计划表执行任务,例如 每周五的中午、每月第十天的上午10:15 触发任务;

JobDataMap

JobDataMap 对象可以用来在任务执行时提供必要的属性设置信息。这些信息必须是序列化的数据对象。它实现的java中的Map接口,并为基本类型提供了存取数据的简单方法。

// define the job and tie it to our DumbJob class
  JobDetail job = newJob(DumbJob.class)
      .withIdentity("myJob", "group1") // name "myJob", group "group1"
      .usingJobData("jobSays", "Hello World!")
      .usingJobData("myFloatValue", 3.141f)
      .build();
public class DumbJob implements Job {

    public DumbJob() {
    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException
    {
      JobKey key = context.getJobDetail().getKey();

      JobDataMap dataMap = context.getJobDetail().getJobDataMap();

      String jobSays = dataMap.getString("jobSays");
      float myFloatValue = dataMap.getFloat("myFloatValue");

      System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
    }
  } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭and小黑鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值