Quartz的重要接口API(二)

简介: Quartz的重要接口API(二)

一. Job方面的接口

一.一 Job接口

Quartz 框架提供了 org.quartz.Job 接口,开发者需要实现这个接口,让框架知道,开发者自定义的工作任务是什么。

package org.quartz;
public interface Job {
    void execute(JobExecutionContext context)
        throws JobExecutionException;
}


里面只有一个方法, execute()。


里面的参数 JobExecutionContext 对象,是 作业运行上下文对象,可以获取作业的相关信息。

一.二 JobExecutionContext

用于获取上下文对象的内容。

主要方法有:

image.png


一.三 JobBuilder

一.三.一 作用

是建造者模式, 通过 JobBuilder 来创建 JobDetail。


需要绑定 一.一 里面的作业类,来表示执行的是哪一个作业。


一个作业,可以被多个触发器触发, 一个作业,也可以被多次绑定,虽然同一个Job,执行的内容是一致的,但是作业运行上下文对象是不一样的,

为了区分不同的作业,需要给当前这个作业设置一个独一无二的id, 设置job的编号和组的编号,就是 JobKey。 job的编号是必须的,组的名称可以不设置。


主要方法有:

image.png


可以链式编程,方法返回的都是 this 当前对象 。


一.三.二 常用方法

image.png一.四 JobKey

存储 JobBuilder 创建时,传递过来的 job编号和组名

package org.quartz;
import org.quartz.utils.Key;
public final class JobKey extends Key<JobKey> {
    private static final long serialVersionUID = -6073883950062574010L;
    public JobKey(String name) {
        super(name, null);
    }
    public JobKey(String name, String group) {
        super(name, group);
    }
    public static JobKey jobKey(String name) {
        return new JobKey(name, null);
    }
    public static JobKey jobKey(String name, String group) {
        return new JobKey(name, group);
    }
}


JobBuilder 传递过来时,withIdentity(name,group)

public JobBuilder withIdentity(String name, String group) {
        key = new JobKey(name, group);
        return this;
 }


一.五 JobDataMap

最终继承 java.util.Map 接口,也是 Key-value 类型的 Map接口, 用于存放数据。


image.png


一.六 JobDetail

真正被调用的接口, 通过JobBuilder 通过建造者模式创建出来,可以获取它的相关信息


image.png


Job方面的接口,大概就是这六个。


二. Trigger 方面的接口

二.一 TriggerBuilder

二.一.一 作用

建造者模式,用于创建 Trigger。


可以设置 开始的时间, 可以设置立即启动, 可以设置结束的时间,也可以设置Trigger的标识名和组名,可以设置调度器(多长时间运行一次,运行几次)。 调度器与开始的时间进行关联, 构建 什么时候开始执行,多长时间运行一次,运行几次,一个完整的任务链。


image.png


可以链式编程, 返回的是 this 当前对象。


二.一.二 常用方法

image.png

二.二 TriggerKey

Trigger 触发器的标识, 与JobKey 类似

package org.quartz;
import org.quartz.utils.Key;
public final class TriggerKey extends Key<TriggerKey> {
    private static final long serialVersionUID = 8070357886703449660L;
    public TriggerKey(String name) {
        super(name, null);
    }
    public TriggerKey(String name, String group) {
        super(name, group);
    }
    public static TriggerKey triggerKey(String name) {
        return new TriggerKey(name, null);
    }
    public static TriggerKey triggerKey(String name, String group) {
        return new TriggerKey(name, group);
    }
}


TriggerBuilder 传递过来时,withIdentity(name, group)

public TriggerBuilder<T> withIdentity(String name, String group) {
        key = new TriggerKey(name, group);
        return this;
  }


二.三 ScheduleBuilder

有四个实现类

image.png


但常用的,只有两个, SimpleScheduleBuilder 和 CronScheduleBuilder


SimpleScheduleBuilder 是通过方法来定义,隔多长时间执行一次,执行几次。 什么时候开始执行,在 TriggerBuilder 里面定义。


CronScheduleBuilder 是通过 cron 表达式,来定义多长时间执行一次,执行几次和什么时候开始执行。


二.四 SimpleScheduleBuilder

二.四.一 作用

里面定义了很多方法, 有second(秒),minute(分钟),hour(小时) 来定义,每隔多长时间再次执行一次, 也定义了执行的次数。


如果上升到天,月和周的话,就需要开发者自己进行处理时间了。


以second 秒进行举例


image.png


提供了两种方式, 静态方法和普通方法设置时间间隔和次数。


发现,以 repeatSecondlyForever(int seconds) 为例:

public static SimpleScheduleBuilder repeatSecondlyForever(int seconds) {
    return simpleSchedule()
        .withIntervalInSeconds(seconds)
        .repeatForever();
}


内部调用了非静态的方法。


读者可以自行进行选择使用哪一种方式, 比较喜欢静态的方式,写起来简单。


二.四.二 常用方法

以second 秒 进行举例。

image.png


image.png

提示: 当使用普通方法时,repeatForever()不能单独使用,withRepeatCount(int triggerRepeatCount)也不能单独使用,


Exception in thread “main” org.quartz.SchedulerException: Repeat Interval cannot be zero


必须要与 withIntervalInSeconds(int intervalInSeconds) 方法同时使用。


但可以单独使用 withIntervalInSeconds(int intervalInSeconds) 方法,这时只执行一次。


二.五 CronScheduleBuilder

关于 CronScheduleBuilder, 后面会有专门的章节进行讲解。


三. Scheduler 方面的接口


三.一 StdSchedulerFactory

工厂模式,用于创建 调度 Scheduler,有一个方法 getDefaultScheduler(), 用于获取 Scheduler

public static Scheduler getDefaultScheduler() throws SchedulerException {
        StdSchedulerFactory fact = new StdSchedulerFactory();
        return fact.getScheduler();
}


由于 StdSchedulerFactory 的构造方法是 public, 所以有两种方式可以获取 Scheduler


三.一.一 静态方法 getDefaultScheduler()获取

Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();


三.一.二 构造方法 获取

StdSchedulerFactory stdSchedulerFactory=new StdSchedulerFactory();
  Scheduler scheduler=stdSchedulerFactory.getScheduler();


静态方法内部实际调用的是构造方法。


建议采用第一种方式 进行获取 Scheduler


三.二 Scheduler

用于关联 JobDetail 和 Trigger, 并且可以启动和停止调度。


image.png


谢谢您的观看!!!


相关文章
|
10天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
22天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。
|
23天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
1月前
|
编解码 监控 API
直播源怎么调用api接口
调用直播源的API接口涉及开通服务、添加域名、获取API密钥、调用API接口、生成推流和拉流地址、配置直播源、开始直播、监控管理及停止直播等步骤。不同云服务平台的具体操作略有差异,但整体流程简单易懂。
|
13天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
1月前
|
人工智能 自然语言处理 PyTorch
Text2Video Huggingface Pipeline 文生视频接口和文生视频论文API
文生视频是AI领域热点,很多文生视频的大模型都是基于 Huggingface的 diffusers的text to video的pipeline来开发。国内外也有非常多的优秀产品如Runway AI、Pika AI 、可灵King AI、通义千问、智谱的文生视频模型等等。为了方便调用,这篇博客也尝试了使用 PyPI的text2video的python库的Wrapper类进行调用,下面会给大家介绍一下Huggingface Text to Video Pipeline的调用方式以及使用通用的text2video的python库调用方式。
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
23天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
29天前
|
JSON API 开发者
1688API商品详情接口如何获取
获取 1688 API 商品详情接口的步骤包括:1. 注册开发者账号;2. 了解接口规范和政策;3. 申请 API 权限;4. 获取 API 密钥;5. 实现接口调用(选择开发语言、发送 HTTP 请求);6. 处理响应数据。通过这些步骤,可以顺利调用 1688 的商品详情 API。
|
1月前
|
监控 API 开发工具
深入理解API设计:构建高效的接口
【10月更文挑战第6天】深入理解API设计:构建高效的接口
85 0
下一篇
无影云桌面