Quartz组成部分和实现案例

news/2024/11/29 1:46:01/

Quartz 是一个功能强大且广泛使用的开源任务调度框架,它的组成部分包括:

  1. Job(任务):Job 是需要被调度执行的具体任务逻辑。开发者需要实现 Job 接口,并编写具体的任务逻辑代码。
  2. JobDetail(任务细节):JobDetail 定义了 Job 的详细信息,包括 Job 的名称、所属的 Job 类型、以及其他属性配置等。每个 Job 都需要对应一个 JobDetail。
  3. Trigger(触发器):Trigger 定义了 Job 的触发条件和执行策略,决定了 Job 何时执行以及如何执行。可以设置触发器的时间表达式、重复执行间隔、开始时间、结束时间等。
  4. Scheduler(调度器):Scheduler 是 Quartz 的核心组件,负责按照 Trigger 的定义来触发执行 Job。它负责维护和管理 JobDetail 和 Trigger,执行任务调度的工作。
  5. JobStore(任务存储):JobStore 是 Quartz 的持久化存储机制,负责将 JobDetail 和 Trigger 的信息存储到数据库中,以便在应用重启后能够恢复任务调度的状态。
  6. JobExecutionContext(任务执行上下文):JobExecutionContext 提供了在 Job 执行期间访问和操作 JobDetail、Trigger 以及其他相关信息的能力。
  7. Listener(监听器):Quartz 提供了一些监听器接口,可以通过实现这些接口来监控和响应 Job 的执行过程,例如在任务开始、完成或失败时触发一些操作。

以上组件共同构成了 Quartz 的基本架构,使其能够实现灵活、可靠的任务调度功能。开发者可以通过配置和编码来定制和扩展 Quartz 的功能,满足各种复杂的调度需求。

下面是一个简单的 Quartz 实现案例:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class QuartzExample 
{public static void main(String[] args) throws SchedulerException {// 创建 SchedulerFactory 实例SchedulerFactory schedulerFactory = new StdSchedulerFactory();// 获取 Scheduler 实例Scheduler scheduler = schedulerFactory.getScheduler();// 定义一个 JobDetailJobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("myJob", "group1").build();// 定义一个 TriggerTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();// 将 JobDetail 和 Trigger 注册到 Scheduler 中scheduler.scheduleJob(jobDetail, trigger);// 启动 Schedulerscheduler.start();}
}public class MyJob implements Job 
{public void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("Job executed!");}
}

在上述示例中,我们创建了一个简单的 Quartz 实例,定义了一个名为 “myJob” 的 JobDetail 和一个名为 “myTrigger” 的 Trigger,并将它们注册到 Scheduler 中。该 JobDetail 关联的 Job 类型是 MyJob,当触发条件满足时,会执行 MyJob 中的 execute 方法。在这个例子中,MyJob 只是简单地输出一条消息。

当程序运行时,Scheduler 将按照 Trigger 的定义来触发执行 MyJob。在本例中,Trigger 设置为每隔 10 秒触发一次,无限重复执行。可以根据具体需求来设置 Trigger 的执行规则。

这是一个基本的 Quartz 实现案例,你可以根据自己的需求进行定制和扩展。

总结:

Quartz组成部分:调度器:scheduler;任务:JobDetail;;角触发器:Trigger,包括SimpleTrigger和CronTrigger

1个job对应多个Trigger

// 绑定jobDetai1 和 trigger,将它注册进Scheduler当中,返回值是最近一次任务执行的开始时间
Date scheduleJob(JobDetail jobDetail,Trigger trigger)
// 启动Scheduler
void start()
// 暂停Scheduler
void standby()
// 关闭Scheduler
void shutdown()

先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!


http://www.ppmy.cn/news/109706.html

相关文章

ElasticSearch安装部署——超详细

ElasticSearch安装部署 简介 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 es)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elasticsearch简称es&…

2023年9月数学建模:最小二乘优化、曲线拟合与函数逼近

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 1. 最小二乘优化 1.1 最小二乘优化的原理 1.2 最小二乘优化的方法 1.2.1 线性最小二乘法 1.2.1.1 正规方程 1.2.1.2 梯度下降法 2. …

C++ map类成员介绍 (map与multimap)

目录 🤔map模板介绍: 🤔特点: 🤔map容器与哈希表: 🤔map的成员函数: 🙂map构造函数: 代码示例: 运行结果: 🙂map赋…

陕西省养老服务人才培训基地申报条件范围、认定材料流程

今天为大家整理了陕西省养老服务人才培训基地申报条件范围、奖励措施等内容,感兴趣的朋友们可以了解一下! 如果想要申报西安市、宝鸡市、铜川市、咸阳市、渭南市、延安市、汉中市、榆林市、安康市、商洛市的项目政策,详情见下图 目标任务 陕…

spdk记录

spdk记录 hello_bdev命令行参数 往期文章: spdk环境搭建 hello_bdev 代码路径:examples/bdev/hello_world/hello_bdev.c 可执行文件路径:build/examples/hello_bdev 刚开始直接执行hello_bdev显示找不到Malloc0 ./build/examples/hello_b…

C++ vector模板和deque的简单应用

目录 🤔vector模板和deque的简单介绍: 🤔vector和deque的主要不同之处: 🤔今天我们用vector模板和deque模板实现以下简单的功能: 代码实现: 🤔讲解: 🤔vector模板和d…

代码随想录算法训练营第三十七天|738.单调递增的数字 968.监控二叉树

目录 LeeCode 738.单调递增的数字 LeeCode 968.监控二叉树 LeeCode 738.单调递增的数字 738. 单调递增的数字 - 力扣(LeetCode) 思路:从后向前遍历,遇到strNum[i - 1] > strNum[i]的情况,则strNum[i - 1]--&…

代码随想录算法训练营第四十一天|343. 整数拆分 96.不同的二叉搜索树

目录 LeeCode 343. 整数拆分 动态规划法 贪心解法 LeeCode 96.不同的二叉搜索树 LeeCode 343. 整数拆分 343. 整数拆分 - 力扣(LeetCode) 动态规划法 思路: 1.确定dp数组及下标含义:dp[i]:分拆数字i&#xff0…