Quartz简介(一)(五)

Quartz调度框架详解
本文介绍了Quartz调度框架,强调其强大的调度功能、灵活的应用方式和分布式能力。讲解了核心概念,如Scheduler、JobDetail、Trigger,特别是SimpleTrigger和CronTrigger的使用,并提供了创建Scheduler的示例。

Quartz简介

看到一个不错的使用quartz的总结博客,Mark一下。传送门:https://www.cnblogs.com/drift-ice/p/3817269.html

特点:

  • 强大的调度功能
  • 灵活的应用方式
  • 分布式和集群能力

用的的设计模式

  1. Builder模式
  2. Factory模式
  3. 组件模式
  4. 链式写法

Quartz体系结构

核心概念
  1. 调度器(scheduler):将JobDetail和trigger绑定在一起。包括如下方法:
    • start
    • stop
    • pause
    • resume
  2. 任务(JobDetail):包含任务的实现类和类的一些信息
  3. 触发器(trigger):决定任务什么时候被调用,有如下两种:
    • SimpleTrigger(类似timer)
    • CronTrigger(更复杂)
重要组成
  1. Job:接口
  2. JobDetail:
  3. JobBuilder:创建JobDetail的实例
  4. JobStore:接口
  5. Trigger:
  6. TriggerBuilder:创建Trigger的实例
  7. ThreadPool:
  8. Scheduler
  9. Calendar:一个Trigger可以和多个Calendar关联,以排除或包含某些时间点。
  10. 监听器:包括JobListener、TriggerListener、SchedulerListener。

Job&JobDetail

Job

Job接口非常容易实现,只有一个execute方法,类似TimerTask的run方法,在里面编写业务逻辑。

源码如下

package org.quartz;

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

Job实例在Quartz中的生命周期:

每次调度器执行job时,它在调用execute方法前会创建一个新的job实例。

当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。

JobDetail

JobDetail为Job实例提供了很多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。

重要属性
- name
- gruop:默认DEFAULT
- jobClass
- jobDataMap

JobExecutionContext
  • 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execute()方法;
  • Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。
JobDataMap

JobDataMap是什么
- 在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取。
- JobDataMap可以用来装载任何可序列化的数据对象,当Job实例对象被执行时这些参数对象会传递给它。
- JobDataMap实现了JDK的Map接口,并且添加了一些非常方便的方法用来存取基本数据类型。

获取JobDataMap的两种方式
- 从Map中直接获取
- Job实现类中添加setter方法对应JobDataMap的键值(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动地调用这些setter方法)

浅谈Trigger

Quartz中的触发器是用来告诉调度程序作业什么时候触发。即Trigger对象是用来触发执行Job的。

触发器通用属性
  1. JobKey

    表示job实例的标识,触发器被触发时,该指定的job实例会执行。

  2. StartTime

    表示触发器的时间表首次被触发的时间。它的值的类型是java.util.Date。

  3. EndTime

    指定触发器的不再被触发的时间。它的值是java.util.Date。

SimpleTrigger

在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务

需要注意的点:
- 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量
- 重复执行间隔必须为0或长整数
- 一旦被指定了endTime参数,那么它会==覆盖重复次数参数==的效果

CronTrigger

基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更常用。

  • Cron表达式(类似Linux中的CronTable)

用于配置CronTrigger实例。

是由7个表达式组成的字符串,描述了时间表的详细信息。

格式:[秒] [分] [小时] [日] [月] [周] [年](中间有空格)

详解如下:http://www.cnblogs.com/yaowen/p/3779284.html

  • Cron表达式小提示

    • ’L’和’W’可以组合使用
    • 周字段英文字母不区分大小写即MON和mon相同
    • 利用工具,在线生成。传送门:http://cron.qqe2.com

浅谈Scheduler

Scheduler-所有的Scheduler实例应该由SchedulerFactory来创建。

Scheduler的创建方式:
/*
 * 创建Scheduler的方式一
 */
//创建Sche
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值