当前位置: 首页 > article >正文

quartz 架构详解

Quartz是一个为Java服务量身定制的开源任务调度框架,通过触发器设置作业定时运行规则,控制作业的运行时间。以下是对Quartz架构的详细解析:

1. Quartz 的核心组件

Quartz 的架构由多个核心组件组成,每个组件都有特定的职责和功能。理解这些组件的工作原理是掌握 Quartz 使用的关键。

1.1 Scheduler (调度器)
  • 作用:Scheduler 是 Quartz 的核心组件,负责管理所有任务的调度。
  • 功能
    • 创建、启动、暂停和关闭调度器。
    • 注册 Job 和 Trigger。
    • 管理作业的执行状态(如是否正在运行)。
1.2 Job (作业)
  • 作用:Job 表示要执行的任务逻辑。
  • 实现:需要实现 org.quartz.Job 接口,并重写 execute(JobExecutionContext context) 方法,在其中编写具体的业务逻辑。
  • 特性:Job 可以是无状态的(每次执行都是独立的),也可以是有状态的(支持并发控制)。
1.3 Trigger (触发器)
  • 作用:Trigger 定义了 Job 执行的时间规则。
  • 类型
    • SimpleTrigger:按照固定的间隔或次数执行。
    • CronTrigger:基于 Cron 表达式的复杂时间表达式,可以精确到秒级别。
  • 功能:允许设置开始时间、结束时间和重复策略等参数。
1.4 JobDetail (作业详情)
  • 作用:JobDetail 包含了 Job 的元数据信息,如 Job 类、名称、组名以及其他属性。
  • 创建:通过 JobBuilder 来构建 JobDetail 实例。
1.5 JobDataMap
  • 作用:提供了一种机制,可以在 Job 和 Trigger 之间传递参数。
  • 使用:可以将任意数量的键值对存入 JobDataMap 中,在 Job 的 execute 方法中访问这些数据。

2. Quartz 的工作流程

Quartz 的工作流程主要包括以下几个步骤:

  1. 初始化 Scheduler:创建并配置 Scheduler 实例。
  2. 定义 Job:编写实现了 Job 接口的类,定义具体要执行的任务。
  3. 构建 JobDetail:使用 JobBuilder 创建 JobDetail 实例,指定 Job 类和其他相关属性。
  4. 设置 Trigger:根据需要选择 SimpleTrigger 或 CronTrigger,设定执行时间规则。
  5. 注册 Job 和 Trigger:将 JobDetail 和 Trigger 注册到 Scheduler 中。
  6. 启动 Scheduler:调用 scheduler.start() 方法开始调度。
  7. 执行 Job:当满足 Trigger 设置的时间条件时,Scheduler 会调用相应的 Job 的 execute 方法。
  8. 停止 Scheduler:在适当的时候调用 scheduler.shutdown() 停止调度器。

3. 高级特性

3.1 持久化存储

Quartz 支持多种持久化存储方案,如内存、文件系统、数据库等。通过 JDBCJobStore,可以将 Job 和 Trigger 的状态保存到关系型数据库中,从而实现高可用性和集群支持。

3.2 集群模式

在集群环境中,多个节点共享同一个数据库中的 Job 和 Trigger 数据,确保即使某个节点失效,其他节点也能继续处理任务。这要求所有节点都配置相同的 Quartz 属性,并且使用相同的数据库连接池。

3.3 监控与管理

Quartz 提供了监听器接口(如 SchedulerListener, JobListener, TriggerListener),允许开发者监控调度过程中的事件,如 Job 的开始和完成、异常发生等。此外,还可以集成第三方工具来进行可视化管理和监控。

3.4 并发控制

对于有状态的 Job,Quartz 内置了并发控制机制,确保同一时间只有一个实例在执行。这对于防止资源竞争非常重要。

3.4 集群特性

Quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点。该集群需要分别对每个节点分别启动或停止,独立的Quartz节点并不与另一个节点或是管理节点通信,Quartz应用是通过数据库表来感知到另一应用。只有使用持久的JobStore才能完成Quartz集群。

在集群配置中,需要注意以下几点:

  1. org.quartz.jobStore.class属性为JobStoreTX,将任务持久化到数据库中。因为集群中节点依赖于数据库来传播Scheduler实例的状态,所以只能在使用JDBCJobStore时应用Quartz集群。
  2. org.quartz.jobStore.isClustered属性为true,通知Scheduler实例要它参与到一个集群当中。
  3. org.quartz.jobStore.clusterCheckinInterval属性定义了Scheduler实例检入到数据库中的频率(单位:毫秒)。

4. 应用场景

Quartz框架主要用来执行定时任务,其典型的使用场景包括:

  1. 定时发送信息。
  2. 定时生成报表。
  3. 自动更新静态数据。
  4. 自动结账等。

此外,Quartz还可以用于定时数据同步、定时数据处理、系统维护任务、定时重启服务、定时清理缓存、消息通知、自动化运维、电商秒杀活动以及Web服务器定时任务等场景。

5. 与其他框架的集成

Quartz框架可以与Spring等框架进行集成,Spring通过提供org.springframework.scheduling.quartz下的封装类对Quartz进行支持。这使得Quartz可以更加方便地在Java应用程序中使用,并充分利用Spring框架的依赖注入、事务管理等特性。

总结

Quartz 的架构设计使得它可以轻松地集成到任何 Java 应用程序中,无论是简单的单机应用还是复杂的分布式系统。了解 Quartz 的核心组件及其工作流程,可以帮助你更好地利用这个强大的调度库来满足项目中的调度需求。


http://www.kler.cn/a/428618.html

相关文章:

  • 解决后端接口返回Long类型参数导致的精度丢失问题
  • Hadoop•搭建完全分布式集群
  • 基于Python django的音乐用户偏好分析及可视化系统设计与实现
  • ChatGPT Prompt 编写指南
  • 第12章:Python TDD完善货币加法运算(一)
  • QTableWidget的简单使用
  • 算法-字符串-43.字符串相乘
  • 【并集查询】.NET开源 ORM 框架 SqlSugar 系列
  • G15沈海高速茶白高架自动化监测
  • 机器学习之Friedman检验
  • 通过华为鲲鹏认证的软件产品如何助力信创产业
  • 网络原理(HPPT/HTTPS)
  • GA-Kmeans-Transformer-GRU时序聚类+状态识别组合模型,创新发文无忧!
  • 力扣打卡10:K个一组翻转链表
  • 【前端学习笔记】Vue2基础
  • Kafka服务器的简单部署以及消息的生产、消费、监控
  • three.js透光率实现原理归纳
  • 论文阅读笔记:Adaptive Rotated Convolution for Rotated Object Detection
  • 最短路问题
  • 前端(三)html标签(2)
  • 数据中心可视化提升运维新高度
  • 多项式拟合之Math.NET Numerics
  • [Maven]下载安装、使用与简介
  • 【框架】环境切换集成封装
  • CSS3 布局样式及其应用
  • 【机器学习】机器学习的基本分类-监督学习-岭回归(Ridge Regression)