【Spring学习】Quartz任务调度和异步执行

任务调度和异步执行

目录

一、任务调度概述

二、任务调度Quartz

2.1 Quartz基础结构

【1】Job接口

【2】JobDetail类

【3】Trigger类

【4】Calendar

【5】Scheduler

【6】ThreadPool

扫描二维码关注公众号,回复: 12727314 查看本文章

2.2 使用SimpleTrigger

2.3 使用CronTrigger

2.4 使用Calendar

2.5 任务调度信息存储

1. 通过配置文件调整保存策略

2.查询数据库中的运行信息

三、在Spring中使用Quartz

3.1 创建JobDetail

3.2 创建Trigger

3.3 创建Scheduler


一、任务调度概述

1. 应用常见的任务调度,比如以时间为关注点的调度

  • 隔半小时生成精华文章
  • 凌晨统计用户排名
  • 每30分钟针对锁定到期的用户进行解锁
  • 每月1日凌晨统计上个月的数据,生成报表
  • 每半小时查询用户是否有快到期的处理业务等

以及以资源为关注点的调度,比如:web server处理线程请求时,使用线程池共享服务的线程资源。

2. 任务调度本身涉及多线程并发、运行时间规则制定及解析、运行现场保持与恢复、线程池维度等多方面的工作。

二、任务调度Quartz

2.1 Quartz基础结构

主要有调度器、任务和触发器三个概念。

【1】Job接口

    • 是一个接口,通过实现该接口来定义执行任务
    • 只有一个方法void execute(JobExecutionContext context)
    • Job运行时信息保存在JobDataMap实例中
    • 有一个StatefulJob子接口,表示有状态的任务,不能并发执行。无状态的可并发

【2】JobDetail类

    • 用来描述Job实现类机器静态信息,如名称、描述、关联监听器等
    • 执行Job时,接收Job实现类,然后通过反射机制的newInstance来实例化job
    • 构造函数:JobDetail(String name, String group, jobClass),name和group指在scheduler中的组名和名称

【3】Trigger类

    • 是一个类,描述job的时间触发规则,有两个子类:
    • SimpleTrigger:只触发一次或者固定间隔周期触发时使用
    • CronTrigger:可通过cron表达式来进行复杂调度

【4】Calendar

    • 是日历特定时间点的集合,如每年AnnualCalendar、每月MonthlyCalendar、每周WeeklyCalendar等
    • 一个Trigger可以跟多个Calendar关联
    • 举个栗子,如安排周一早晨9点执行任务,但遇到法定节假日则不执行,这时需要使用Calendar进行定点排除

【5】Scheduler

    • 代表一个Quartz的独立运行容器
    • Trigger和JobDetail可以注册到Scheduler中,拥有各自的组和名称
    • Scheduler可将Trigger绑定到JobDetail中,这样Trigger被触发时,job会执行
    • job和Trigger是1对多的瓜系,Scheduler和前两者是1对多的瓜系
    • 可通过SchedulerFactory来创建Scheduler,有个SchedulerContext,通过Map保存上下文数据

【6】ThreadPool

    • Scheduler使用线程池作为任务运行的基础设施

Quartz有完善的事件和监听体系。包括:

  • 任务执行前/后事件
  • 触发器触发前/后事件
  • 调度器开始/关闭事件等

2.2 使用SimpleTrigger

2.3 使用CronTrigger

2.4 使用Calendar

2.5 任务调度信息存储

1. 通过配置文件调整保存策略

Quartz的属性配置文件包括三方面:

  • 集群信息
  • 调度器线程池
  • 任务调度线程数据的保存

2.查询数据库中的运行信息

三、在Spring中使用Quartz

3.1 创建JobDetail

3.2 创建Trigger

3.3 创建Scheduler

猜你喜欢

转载自blog.csdn.net/muyimo/article/details/106394562