第六节:JobStore
跟据名称的意思,很可能理解成存放作业的容器,实际上真不是这样,它放的有哪些东东呢?
JobStore我只看了RAMJobStore,里面其实放了Job和Trigger以及它们之间的关系。
让我们先看下有哪些jobStore吧,如下面类图:
其实也就是两类,一个是内存中,一个持久化存储.
RAMJobStore:
RAMJobStore继承至IJobStore接口,里面有几个需要了解到方法,如下:
//------------------对job的操作---------------------------
//把Job存储到内存中的方法, IJobDetail是作业详细信息
void StoreJob(IJobDetailnewJob,bool replaceExisting);
//移除job的方法,JobKey唯一标识一个job,相当于主键
bool RemoveJob(JobKeyjobKey);
bool RemoveJobs(IList<JobKey> jobKeys);
//得到作业的方法
IJobDetail RetrieveJob(JobKeyjobKey);
//检查作业是否存在
bool CheckExists(JobKeyjobKey);
//------------------对Trigger的操作---------------------------
//把触发器存储到内存中的方法
void StoreTrigger(IOperableTriggernewTrigger,bool replaceExisting);
//移除触发器的方法
bool RemoveTrigger(TriggerKeytriggerKey);
bool RemoveTriggers(IList<TriggerKey> triggerKeys);
//检索触发器
IOperableTrigger RetrieveTrigger(TriggerKeytriggerKey);
//检查是否存在
bool CheckExists(JobKeyjobKey);
//请求下一个要触发的触发器
IList<IOperableTrigger>AcquireNextTriggers(DateTimeOffsetnoLaterThan,int maxCount,TimeSpantimeWindow);
调度器会通过适当的时机向RAMJobStore中添加触发器和作业,然后由QuartzSchedulerThread这个线程类去实时的获取下一个时间点要触发的触发器,然后执行触发器相关联的作业,这些代码基本上都在QuartzSchedulerThread类中的Run方法里面。
最后得到要执行的job是由JobRunShell类在线程池中执行完成的,如果想要在线程池中执行,必须继承IThreadRunnable接口,实现Run方法,JobRunShell就是如此。
结语:RAMJobStore其实就是对作业和触发器做了一次聚合,把它们存储到内存中,由调度线程去请求要执行的触发器,然后找到相联的作业去完成执行。我们也可以理解成它就是对作业和触发器的管理维护,由调度器来操作的一个存储的东东。
内部的代码写的还是比较复杂的,主要是对几Dictionary的操作,有兴趣的朋友可以看下。
相关推荐
石英-redis-jobstore 使用 JobStore。 该项目的灵感来自 ,并提供了相似的功能,但有一些主要区别: Redis数据库和密钥前缀是可配置的。 使用Redis。 该库涵盖了该库的所有功能。要求Java 7或更高版本Redis 2.6.12或...
6. **工具支持**: 在实际项目中,可以利用 IDE 插件或者其他可视化工具来管理和监控 Quartz 任务,如 QuartzAdmin 或者自定义的监控界面。这将帮助开发者更方便地查看和管理调度任务。 综上所述,"Quartzs -- JDBC...
JobStore是Quartz用来存储作业和触发器的地方,它支持多种持久化策略,包括RAMJobStore(内存存储)和各种数据库JobStore实现。 本文主要讲解如何使用Quartz 2.2.0将JobStore配置为持久化到数据库,以及相关的配置...
6. **运行和监控**: 初始化完成后,调用`scheduler.start()`启动Scheduler。开发者可以通过API或者Web界面(如Quartz Enterprise Monitor)来监控和管理任务执行状态。 7. **扩展与高级功能**: Quartz还支持...
6. **cron表达式**:CronTrigger使用cron表达式来定义触发时间。这种表达式允许指定基于时间的调度,如每天的特定时间、每周的某一天等。 在“quartz-jobs”模块中,包含了一些预先定义好的作业类型,这些作业可以...
【标题】 DynamoDB上的Quartz Scheduler JobStore实现 在分布式系统中,定时任务调度是必不可少的功能,而Quartz Scheduler是一款广泛使用的开源作业调度框架,它允许开发者定义和调度任务执行。然而,传统的Quartz...
6. **线程池管理**:Quartz 内置了线程池管理,可以根据需要调整线程数量,优化资源利用。 在 "quartz-all-1.6.0.jar" 文件中,可能包含以下关键组件: - **Scheduler**:调度器,负责管理所有的 Job 和 Trigger,...
org.quartz.jobStore.isClustered: true org.quartz.scheduler.clusterCheckinInterval: 20000 # 每20秒检查一次集群状态 ``` 最后,确保每个节点的`instanceId`设置为`AUTO`,这样Quartz会根据节点的唯一标识...
集成Quartz到Spring项目中的第一步通常是引入依赖。在描述中提到的“最少依赖的jar包”,通常包括Spring的核心库、Quartz的库以及可能需要的数据库驱动(如果计划使用数据库存储Job和Trigger信息)。这些jar包应该在...
<artifactId>quartz-jdbc-jobstore <version>2.3.2 <groupId>mysql <artifactId>mysql-connector-java <scope>runtime ``` 接下来,我们需要在`application.yml`或`application.properties`中配置Quartz与...
第六章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第六章. Job 存储和持久化 (第二部分) 内容提要:使用...
"quartz-elasticsearch-jobstore" 是一个专门为Java平台设计的Quartz作业存储模块,它将Quartz Job的调度信息存储在Elasticsearch中,而非传统的RDBMS(关系型数据库管理系统)。Quartz是一个广泛使用的开源任务调度...
- **作业存储配置**:包括RAM JobStore和JDBC JobStore两种方式。 #### 三、配置主题 - **主调度器配置设置**:主要包括调度器实例名称、日志级别等基本信息设置。 - **实例名**:每个调度器实例的唯一标识。 - ...
1. **配置JobStore**:根据需求选择合适的JobStore实现,并配置相关参数,如数据库连接信息。 2. **配置ClusterManager**:设置集群参数,如instanceId、集群节点的数量(numInstances)等。 3. **启动Scheduler**...
6. **JobDataMap**:这是一个键值对的数据结构,用于存储作业执行所需的参数和数据。这些参数可以在触发器触发作业时传递。 7. **JobListener**和**TriggerListener**:这两种监听器接口用于监听作业的执行状态和...
1. **JobStore**:Quartz提供了多种JobStore实现,如RAMJobStore(内存存储)和SQLJobStore(数据库存储)。SQLJobStore是持久化的首选,因为它能在服务器重启后恢复调度信息。 2. **配置文件**:项目可能包含`...
6. **集成与配置**:Quartz 可以轻松集成到任何 Java 应用中,通常通过 XML 配置文件来定义作业和触发器。此外,它还支持 Spring 的集成,使得在 Spring 容器中管理和配置 Quartz 更加方便。 7. **并发与线程安全**...
6. **示例代码** ```java @Configuration public class QuartzConfig { @Autowired private DataSource dataSource; @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean ...
在配置Quartz时,可以通过`org.quartz.jobStore.class`属性来指定使用的JobStore实现。 博客中可能还会提到Quartz的触发器状态管理,包括PAUSED(暂停)、WAITING(等待)、ACQUIRED(已获取)、COMPLETE(完成)等...
6. **插件(Plugins)**:Quartz提供了多种插件,如EmailTriggerListener(邮件触发监听器)和StatefulJob(有状态的Job),它们可以扩展Quartz的功能,例如在任务完成后发送通知邮件,或者确保Job的并发执行控制。...