Quartz-JobDetail和Trigger-Job
来源:互联网 发布:蒲公英淘客软件 编辑:程序博客网 时间:2024/06/10 08:01
Quartz是一个开源的作业调度框架,完全由java写的,你能通过它创建简单或者复杂的任务。他能提供巨大的灵活性,但又不牺牲简单性
Quartz的核心概念:调度器(Scheduler)、触发器、作业(Job)
1、调度器(Scheduler)
Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。
要创建一个作业并能够被触发调用,必须在Scheduler上面注册一个JobDetail和Trigger。
Scheduler提携了所有Trigger和JobDetail,使它们协调工作。这些Trigger和JobDetail通过自身的name和group属性区分。
Scheduler 由SchedulerFactory产生
SchedulerFactory factory = new StdSchedulerFactory(); Scheduler scheduler = factory.getScheduler();2、作业(Job)
任务,表示一个工作,要执行的具体内容。其实就是一个接口。要创建一个任务,必须得实现这个接口。该接口只有一个execute方法,任务每次被调用的时候都会执行这个execute方法的逻辑。
public class TestJob impletemens org.quartz.Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException{ // you business logic // … System.out.println("########### this is testJob running ############"); }}3、JobDetail
JobDetail 表示一个具体的可执行的调度程序,Job是这个可执行的调度程序所要执行内容,另外JobDetail还包含了这个任务调度的方案和策略。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail。下面是JobDetail的一些常用的属性和含义
参数名
类型
备注
name
String
任务的名称,必须
group
String
任务所在组,默认为DEFAULT
jobClass
Class
任务的实现类,必须
description
String
描述
jobDataMap
JobDataMap
用来给作业提供数据支持的数据结构
volatility
Boolean
重启应用之后是否删除任务的相关信息,默认false
durability
Boolean
任务完成之后是否依然保留到数据库,默认false
shouldRecover
Boolean
应用重启之后时候忽略过期任务,默认false
jobListeners
Set
监听器
JobDataMap这是一个给作业提供数据支持的数据结构,使用方法和java.util.Map一样,非常方便。当一个作业被分配给调度器时,JobDataMap实例就随之生成。
Job有一个StatefulJob子接口,代表有状态的任务,该接口是一个没有方法的标签接口,其目的是让Quartz知道任务的类型,以便采用不同的执行方案。无状态任务在执行时拥有自己的JobDataMap拷贝,对JobDataMap的更改不会影响下次的执行。而有状态任务共享共享同一个JobDataMap实例,每次任务执行对JobDataMap所做的更改会保存下来,后面的执行可以看到这个更改,也即每次执行任务后都会对后面的执行发生影响。
正因为这个原因,无状态的Job可以并发执行,而有状态的StatefulJob不能并发执行,这意味着如果前次的StatefulJob还没有执行完毕,下一次的任务将阻塞等待,直到前次任务执行完毕。有状态任务比无状态任务需要考虑更多的因素,程序往往拥有更高的复杂度,因此除非必要,应该尽量使用无状态的Job。
如果Quartz使用了数据库持久化任务调度信息,无状态的JobDataMap仅会在Scheduler注册任务时保持一次,而有状态任务对应的JobDataMap在每次执行任务后都会进行保存。
JobDataMap实例也可以与一个触发器相关联。这种情况下,对于同一作业的不同触发器,我们可以在JobDataMap中添加不同的数据,以便作业在不同时间执行时能够提供更为灵活的数据支持(学校上午放眼保健操录音第一版,下午放第二版)。
不管是有状态还是无状态的任务,在任务执行期间对Trigger的JobDataMap所做的更改都不会进行持久,也即不会对下次的执行产生影响。
4、TriggerTrigger代表一个调度参数的配置,什么时候去调。
- Quartz-JobDetail和Trigger-Job
- Quartz-JobDetail和Trigger-Job
- 【Quartz】深入Job、JobDetail、JobDataMap、Trigger
- 【Quartz】深入Job、JobDetail、JobDataMap、Trigger
- 深入解读Quartz的原理(job-jobDetail-Trigger-scheduler)
- quartz jobdetail trigger定时任务
- Quartz系列笔记(4) -- Job和JobDetail的更多介绍
- Quartz教程 第3课 Job和JobDetail详解
- Quartz:Job和Trigger的关系
- Quartz教程二:API,Job和Trigger
- Quartz教程二:API,Job和Trigger
- Quartz教程二:API,Job和Trigger
- Quartz教程二:API,Job和Trigger
- Quartz教程二:API,Job和Trigger
- Quartz教程三:Job与JobDetail介绍
- Quartz教程三:Job与JobDetail介绍
- Quartz教程三:Job与JobDetail介绍
- Quartz教程三:Job与JobDetail介绍
- [完全背包]Tyvj1199 邮票问题
- 找出字符串中连续出现次数最多的子串
- Command设计模式和java回调机制的异同
- SQL 行转列的一些思考
- 如何快速低成本搭建 DA14580/DA1458x 软硬件开发平台open-ble.org
- Quartz-JobDetail和Trigger-Job
- QFile
- HDU-5433
- hdu2896(病毒侵袭)
- linux在菜单栏中添加程序快捷启动图标
- yum安装包时出现is a duplicate with
- java中如何获取Runtime.getRuntime().exec()或ProcessBuilder.start()产生的进程信息
- Spring事务内多线程处理-解决方案
- java网络TCP套接字使用Object I/O stream出现异常