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

任务调度和异步执行

目录

一、任务调度概述

二、任务调度Quartz

2.1 Quartz基础结构

【1】Job接口

【2】JobDetail类

【3】Trigger类

【4】Calendar

【5】Scheduler

【6】ThreadPool

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值