20181111 Quartz(慕课网)

Quartz体系结构

三个核心概念

  • 调度器
  • 任务
  • 触发器

重要组成

  • Job
  • JobBuilder
  • JobDetail
  • JobStore
  • Trigger
  • TriggerBuilder
  • ThreadPool
  • Scheduler

监听器

  • JobListener
  • TriggerListener
  • SchedulerListener

Quartz简单使用

HelloJob的定义

public class HelloJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Hello Quartz: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
    }
}

定时调用HelloJob

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("name1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("name1", "group1").startNow()
        .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();

Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
System.out.println("任务开始: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
scheduler.scheduleJob(jobDetail, trigger);

Job & JobDetail

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

每次调度器执行Job时,它在调用execute方法前会创建一个新的Job实例。
当调用完成后,关联的Job对象实例会被释放,释放的实例会被垃圾回收机制回收。

JobDetail

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

重要属性

  • name
  • group
  • jobClass
  • jobDataMap

JobDataMap

获取JobDataMap中内容的两种方式

  1. 从Map中直接获取
  2. 添加setter方法对应键值

触发器Trigger

通用属性

  • JobKey
  • StartTime
  • EndTime

SimpleTrigger

  • 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值
  • 重复执行间隔必须是0或长整数
  • 一旦被指定了endTime参数,那么会覆盖重复次数参数的效果

CronTrigger

Cron表达式

用于配置CronTrigger实例。
是由7个子表达式组成的字符串,描述了时间表的详细信息。
格式:秒 分 时 日 月 周 年(可省略)

特殊字符意义

字段 是否必填 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * / ? L W C
1-12或JAN-DEC , - * /
1-7或SUN-SAT , - * / ? L C #
空,1970-2099 , - * /
符号说明
字符 含义
* 所有
? 不确定值
- 区间
, 多个值,或的意思
/ 递增
L 最后
W 指定日期的最近那个工作日
# 序号,第几
  • LW可以一起使用
  • 周字段不区分大小写,MONmon相同
  • 利用工具生成表达式

在线Cron表达式生成器

Scheduler

  • 主要类:StdScheduler
  • 配置参数默认存储在quartz.properties中,在quartz的jar包下,org/quartz/quartz.properties
  • 主要函数
    • scheduleJob
    • start
    • standby(挂起)
    • shutdown(boolean参数,如果传入true,等待所有job完成后关闭,false或者无参数,立即关闭)

quartz.properties

  • 调度器属性
  • 线程池属性
  • 作业存储设置
  • 插件配置

Spring集成

两种方式

  • MethodInvokingJobDetailFactoryBean
  • JobDetailFactoryBean(更灵活)

参考

原文地址:https://www.cnblogs.com/huangwenjie/p/9943152.html