quartz基本概念

2024-09-03 21:36
文章标签 基本概念 quartz

本文主要是介绍quartz基本概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入门案例

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class HelloJob implements Job {private String j1;public void setJ1(String j1) {this.j1 = j1;}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("************任务开始执行***********");System.out.println(j1);System.out.println("任务执行结束!");}
}
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;public class Main {public static void main(String[] args) throws Exception {JobDetail job1 = newJob(HelloJob.class)// 往JobDataMap中传入数据.usingJobData("j1", "我是job1")// 给JobDetail定义一个唯一标识,group+name唯一确定一个JobDetail.withIdentity("job1", "group1").build();Trigger trigger = newTrigger()// 给Trigger定义一个唯一标识,group+name唯一确定一个Trigger.withIdentity("trigger1", "group1")// 往JobDataMap中传入数据.usingJobData("t1", "v1")// 规定Trigger触发时间,这里是每秒触发一次.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever()).build();Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// 把Trigger和JobDetail绑定起来scheduler.scheduleJob(job1, trigger);scheduler.start();}
}

执行结果

************任务开始执行***********
我是job1
任务执行结束!
************任务开始执行***********
我是job1
任务执行结束!

基本概念

Job

源码

public interface Job {void execute(JobExecutionContext context)throws JobExecutionException;
}

这只是一个接口类,定义execute()方法,所有定时任务实现这个接口,在execute()中编写定时任务的具体执行逻辑。我们称实现Job接口的类为任务定义类,比如这里的HelloJob类。

JobDetail

可以理解为任务定义类的载体或者为任务定义类的特殊实例。

为什么有了Job还要有JobDetail?

因为Job只是定义任务的执行过程,JobDetail可以附加上任务执行时的特有属性。

你可以只创建一个job类,然后创建多个与该job关联的JobDetail实例,每一个实例都有自己的属性集和JobDataMap,最后,将所有的实例都加到scheduler中。

比如,你创建了一个实现Job接口的类“SalesReportJob”。该job需要一个参数(通过JobdataMap传入),表示负责该销售报告的销售员的名字。因此,你可以创建该job的多个实例(JobDetail),比如“SalesReportForJoe”、“SalesReportForMike”,将“joe”和“mike”作为JobDataMap的数据传给对应的job实例。

Trigger

触发器,用来触发Job的,可以在这里面定义触发时间,比如每周执行一次。

Schedule

scheduler 调度器,定义任务的执行规则。当scheduler执行任务时,创建任务定义类(即实现Job接口的类)的实例,执行完毕后,丢弃该实例的引用,该实例就会被垃圾回收。所以任务定义类中不能使用有状态的数据属性。

JobStore

这个接口主要是定义Job和Trigger的存储机制,比如官方提供的RAMJobStore存储到本地内存,也可以自己实现这个接口实现自己的存储机制。

JobDataMap

包含无限的、序列化的数据对象,可以在任务定义类中通过JobExecutionContext获取到。

JobExecutionContext中的JobDataMap是JobDetail中的JobDataMap和Trigger中的JobDataMap的并集,但是如果存在相同的数据,则后者会覆盖前者的值。

public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("************任务开始执行***********");JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();Object j1 = jobDataMap.get("j1");System.out.println(j1);System.out.println("任务执行结束!");}
}

如果在任务定义类中,给存储在JavaDataMap中的key定义了set方法,那么在任务定义类中不需要显示的从JobDataMap中取数据了。

public class HelloJob implements Job {private String j1;public void setJ1(String j1) {this.j1 = j1;}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("************任务开始执行***********");System.out.println(j1);System.out.println("任务执行结束!");}
}

这篇关于quartz基本概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134106

相关文章

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

【Rocketmq入门-基本概念】

Rocketmq入门-基本概念 名词解释名称服务器(NameServer)消息队列(Message Queue)主题(Topic)标签(Tag)生产者(Producer)消费者(Consumer)拉取模式(Pull)推送模式(Push)消息模型(Message Model) 关键组件Broker消息存储工作流程 名词解释 名称服务器(NameServer) 定义: 名称服务器

数据结构的基本概念和术语的一些介绍

数据:是客观事物的符号表示,包括两种:                  数值型(整数,实数)和非数值型(文字,图形,声音 数据元素:是数据的基本单位,通常作为一个整体进行表示。                  与数据的关系:是数据集合的个体 数据项:组成数据元素的不可分割的最小单位。 以上三者的关系:数据>数据元素>数据项                  例如:学生表>个人记录>

【DL--05】深度学习基本概念—函数式模型

函数式模型 函数式模型算是本文档比较原创的词汇了,所以这里要说一下 在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。第二种模型称为Graph,即图模型,这个模型支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。可以看到,Sequentia

【DL--04】深度学习基本概念—data_format

data_format 这是一个无可奈何的问题,在如何表示一组彩色图片的问题上,Theano和TensorFlow发生了分歧,’th’模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32),Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。这种t

【DL--03】深度学习基本概念—张量

张量 TensorFlow中的中心数据单位是张量。张量由一组成形为任意数量的数组的原始值组成。张量的等级是其维数。以下是张量的一些例子: 3 # a rank 0 tensor; this is a scalar with shape [][1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3][[1., 2., 3.]

【DL--02】深度学习基本概念--符号计算

符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号式”的库。 因此,这也使得Keras的编程与传统的Python代码有所差别。笼统的说,符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译以确定其内部细节,然而,此时的计算图还

数据结构 基本概念和述语

数据结构 基本概念和述语数据(data)数据元素(data element)数据项(data item)数据对象(data object)数据结构(data structure)逻辑结构与物理结构逻辑结构物理结构 抽象数据类型(Abstract Data Type, ADT):数据类型:抽象数据类型三元组的定义:抽象数据类型的表示与实现抽象数据类型Triplet的表示和实现: 算法和算法分析

分布式系统的一些基本概念

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 分布式 来自csdn,作者:陆小凤 进阶篇来自:bangerlee 作者对部分地方做了订正 目前这系列文章是网络上分布式