Quartz简介

时间:2020-01-23 22:34:48   收藏:0   阅读:113

任务调度概述

  以论坛为例,每天凌晨统计用户的积分排名,每隔30分钟对锁定到期的用户进行解锁。对别的应用来说,每月一日凌晨统计数据生成月报表,每隔半小时查询用户是否有快到期的待处理业务。

  以上所举调度场景的核心都是以时间为关注点的调度,即在特定的时间点执行指定的操作。任务调度本身设计多线程并发、运行时间规则指定与解析、运行现场保持与恢复、线程池维护等诸多方面的工作。如果直接使用自定义线程的方法处理,开发会很具有挑战性。Quartz提供的功能让开发者可以应对绝大多数任务调度的功能需求。

Quartz基础结构

  Quartz对任务调度的领域问题进行了高度抽象,提出了调度器、任务和触发器这3个核心的概念。

  Job有一个StatefulJob子接口,代表有状态的任务,该接口是一个没有方法的标签接口。无状态任务在执行时拥有自己的JobDataMap实例,对JobDataMap的更改不会影响下次执行。而有状态的任务共享同一个JobDataMap实例,每次任务执行时对JobDataMap所做的更改都会保存,后面的执行会受到影响。

  因此无状态的Job可以并发执行,而有状态的StatefulJob不能并发执行。除非必要,避免使用有状态的Job。

  如果Quartz使用了数据库持久化任务调度信息,则无状态的JobDataMap仅会在Scheduler注册任务时保存一次,而有状态任务对应的JobDataMap在每次执行任务后都会进行保存。

  SchedulerContext提供Scheduler全局可见的上下文信息,每个任务对应一个JobDataMap,虚线的JobDataMap表示有状态的任务。

  一个Scheduler可以拥有多个Trigger和多个JobDetail,它们可以分到不同的组中。在注册Trigger和JobDetail时,如果不指定所属组,那么将放入默认组。

    技术分享图片

 

 

任务调度信息存储

  默认情况下,Quartz将任务调度的运行信息保存在内存中。这种方法提供了最佳的性能,因为在内存中数据访问速度最快;不足之处是缺乏数据的持久性,当程序中途停止时,所有运行的信息都会丢失。例如安排一个执行100次的任务,运行到50次时系统崩溃,当重启时,任务执行计数器将从0开始计数。

  如果需要持久化任务调度信息,可以调整属性文件,将信息保存到数据库中。使用数据库保存信息的任务称为持久化任务。

原文:https://www.cnblogs.com/ELAIRS/p/12218983.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!