本文主要是介绍结合源码分析在 Quartz 的集群模式中,比较核心的数据库表是哪些?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
引言
核心数据表
1. QRTZ_JOB_DETAILS
2. QRTZ_TRIGGERS
3. QRTZ_CRON_TRIGGERS
4. QRTZ_SIMPLE_TRIGGERS
5. QRTZ_SCHEDULER_STATE
源码中的关系示例
引言
在 Quartz 的集群模式中,核心的数据库表是至关重要的,它们共同协作确保任务调度的信息被正确地管理和同步。主要的表包括 QRTZ_JOB_DETAILS
, QRTZ_TRIGGERS
, QRTZ_CRON_TRIGGERS
, QRTZ_SIMPLE_TRIGGERS
, 以及 QRTZ_SCHEDULER_STATE
。接下来,我将详细解释这些表之间的关系,并结合源码来分析它们的作用。
核心数据表
1. QRTZ_JOB_DETAILS
这个表存储每个作业的详细信息,它是定义作业的基础。包括:
- SCHED_NAME:调度器实例的名字。
- JOB_NAME 和 JOB_GROUP:标识作业的唯一键。
- JOB_CLASS_NAME:指定执行作业的 Java 类。
- IS_DURABLE、IS_NONCONCURRENT、IS_UPDATE_DATA、REQUESTS_RECOVERY:这些列定义作业的性质,如是否持久化、是否避免并发执行等。
2. QRTZ_TRIGGERS
这个表存储所有触发器的基本信息,每个触发器都关联到一个作业。它是调度作业执行的核心。
- SCHED_NAME:与作业详细信息表中的调度器名称对应。
- TRIGGER_NAME 和 TRIGGER_GROUP:标识触发器的唯一键。
- JOB_NAME 和 JOB_GROUP:与
QRTZ_JOB_DETAILS
表的作业名和组名对应,表明该触发器要触发的作业。 - DESCRIPTION、NEXT_FIRE_TIME、PREV_FIRE_TIME、PRIORITY:提供触发器的额外信息和调度计划。
3. QRTZ_CRON_TRIGGERS
这个表专门存储使用 Cron 表达式的触发器信息,是 QRTZ_TRIGGERS
的一个扩展,仅适用于 Cron 触发器。
- SCHED_NAME、TRIGGER_NAME、TRIGGER_GROUP:与
QRTZ_TRIGGERS
表中的对应列相匹配,确保关联。 - CRON_EXPRESSION:定义了触发规则的 Cron 表达式。
- TIME_ZONE_ID:Cron 表达式计算的时区。
4. QRTZ_SIMPLE_TRIGGERS
类似于 QRTZ_CRON_TRIGGERS
,这个表存储的是简单触发器的信息,适用于具有固定间隔重复执行的触发器。
- SCHED_NAME、TRIGGER_NAME、TRIGGER_GROUP:与
QRTZ_TRIGGERS
表中的对应列相匹配。 - REPEAT_COUNT、REPEAT_INTERVAL、TIMES_TRIGGERED:定义触发器执行的次数、间隔和已触发次数。
5. QRTZ_SCHEDULER_STATE
这个表为集群模式提供了节点管理的功能,记录每个实例的状态和心跳。
- SCHED_NAME:调度器的名字。
- INSTANCE_NAME:集群中的实例名称。
- LAST_CHECKIN_TIME:最后一次检入时间。
- CHECKIN_INTERVAL:检查间隔时间。
源码中的关系示例
在 Quartz 的源码中,特别是在 org.quartz.impl.jdbcjobstore
包中的 JobStoreSupport
类,提供了如何利用这些表的示例。例如,当调度器尝试获取即将执行的触发器时,它会查询 QRTZ_TRIGGERS
、QRTZ_CRON_TRIGGERS
和 QRTZ_SIMPLE_TRIGGERS
表,以确定下一次触发时间并加载相关的作业详情:
public List<OperableTrigger> acquireNextTriggers(final long noLaterThan, int maxCount, long timeWindow) throws JobPersistenceException {return executeInLock((isLockOnSelect()) ? LOCK_TRIGGER_ACCESS : null,new TransactionCallback<List<OperableTrigger>>() {public List<OperableTrigger> execute(Connection conn) throws JobPersistenceException {...// 此处代码演示如何根据触发时间等参数查询触发器表List<OperableTrigger> triggers = getDelegate().selectTriggersForExecution(...);return triggers;}});
}
这些表之间的关系确保了 Quartz 能够高效地协调各种调度任务,特别是在多节点集群环境中,确保所有的调度信息能够被正确管理和同步。
这篇关于结合源码分析在 Quartz 的集群模式中,比较核心的数据库表是哪些?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!