`
yimeng528
  • 浏览: 188729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

第六节:Quzrtz JobStore

阅读更多

第六节:JobStore

 

跟据名称的意思,很可能理解成存放作业的容器,实际上真不是这样,它放的有哪些东东呢?

JobStore我只看了RAMJobStore里面其实放了JobTrigger以及它们之间的关系。

 

让我们先看下有哪些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的操作,有兴趣的朋友可以看下。

分享到:
评论
1 楼 谷超 2013-08-07  
楼主,如何把job信息持久化到数据库中呢?我试着把job信息持久化到mysql中,没有成功。
1、在数据库中执行对应的sql脚本
2、修改quartz.properties文件如下
org.quartz.jobStore.class= org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval=15000

##config database
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc\:mysql\://localhost\:3306/myhibernate?useUnicode\=true&characterEncoding\=utf8
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = mysql
org.quartz.dataSource.myDS.maxConnections = 5
3、客户端代码
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
System.out.println("----------------Initialization Complete------------------");

// 下一分钟整点时间
Date runTime = DateBuilder.evenMinuteDate(new Date());
System.out.println(runTime);

JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

scheduler.scheduleJob(job, trigger);
System.out.println(job.getKey() + " will run at:" + runTime);

scheduler.start();

job能够正确执行,但是数据库对应表并没有增加相应记录。为什么增加记录呢?

相关推荐

    quartz-redis-jobstore:使用Redis的Quartz Scheduler JobStore

    石英-redis-jobstore 使用 JobStore。 该项目的灵感来自 ,并提供了相似的功能,但有一些主要区别: Redis数据库和密钥前缀是可配置的。 使用Redis。 该库涵盖了该库的所有功能。要求Java 7或更高版本Redis 2.6.12或...

    Quartzs -- JDBC-JobStore - Oracle 实现 + Cluster

    6. **工具支持**: 在实际项目中,可以利用 IDE 插件或者其他可视化工具来管理和监控 Quartz 任务,如 QuartzAdmin 或者自定义的监控界面。这将帮助开发者更方便地查看和管理调度任务。 综上所述,"Quartzs -- JDBC...

    Quartz2.2-JobStore持久化到数据库

    JobStore是Quartz用来存储作业和触发器的地方,它支持多种持久化策略,包括RAMJobStore(内存存储)和各种数据库JobStore实现。 本文主要讲解如何使用Quartz 2.2.0将JobStore配置为持久化到数据库,以及相关的配置...

    quartz配置

    6. **运行和监控**: 初始化完成后,调用`scheduler.start()`启动Scheduler。开发者可以通过API或者Web界面(如Quartz Enterprise Monitor)来监控和管理任务执行状态。 7. **扩展与高级功能**: Quartz还支持...

    quartzjar包.zip

    6. **cron表达式**:CronTrigger使用cron表达式来定义触发时间。这种表达式允许指定基于时间的调度,如每天的特定时间、每周的某一天等。 在“quartz-jobs”模块中,包含了一些预先定义好的作业类型,这些作业可以...

    dynamodb-quartz:DynamoDB上的Quartz Scheduler JobStore实现

    【标题】 DynamoDB上的Quartz Scheduler JobStore实现 在分布式系统中,定时任务调度是必不可少的功能,而Quartz Scheduler是一款广泛使用的开源作业调度框架,它允许开发者定义和调度任务执行。然而,传统的Quartz...

    quartz-all-1.6.0.jar

    6. **线程池管理**:Quartz 内置了线程池管理,可以根据需要调整线程数量,优化资源利用。 在 "quartz-all-1.6.0.jar" 文件中,可能包含以下关键组件: - **Scheduler**:调度器,负责管理所有的 Job 和 Trigger,...

    springboot-quartz 单机demo,分布式下demo

    org.quartz.jobStore.isClustered: true org.quartz.scheduler.clusterCheckinInterval: 20000 # 每20秒检查一次集群状态 ``` 最后,确保每个节点的`instanceId`设置为`AUTO`,这样Quartz会根据节点的唯一标识...

    Spring整合quzrtz

    集成Quartz到Spring项目中的第一步通常是引入依赖。在描述中提到的“最少依赖的jar包”,通常包括Spring的核心库、Quartz的库以及可能需要的数据库驱动(如果计划使用数据库存储Job和Trigger信息)。这些jar包应该在...

    SpringBoot2.0整合Quartz定时任务,实现基于数据库如mysql的动态任务

    &lt;artifactId&gt;quartz-jdbc-jobstore &lt;version&gt;2.3.2 &lt;groupId&gt;mysql &lt;artifactId&gt;mysql-connector-java &lt;scope&gt;runtime ``` 接下来,我们需要在`application.yml`或`application.properties`中配置Quartz与...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    第六章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第六章. Job 存储和持久化 (第二部分) 内容提要:使用...

    quartz-elasticsearch-jobstore

    "quartz-elasticsearch-jobstore" 是一个专门为Java平台设计的Quartz作业存储模块,它将Quartz Job的调度信息存储在Elasticsearch中,而非传统的RDBMS(关系型数据库管理系统)。Quartz是一个广泛使用的开源任务调度...

    Quartz_Scheduler_Configuration_Guide.pdf Version2.2.1

    - **作业存储配置**:包括RAM JobStore和JDBC JobStore两种方式。 #### 三、配置主题 - **主调度器配置设置**:主要包括调度器实例名称、日志级别等基本信息设置。 - **实例名**:每个调度器实例的唯一标识。 - ...

    quartz的集群

    1. **配置JobStore**:根据需求选择合适的JobStore实现,并配置相关参数,如数据库连接信息。 2. **配置ClusterManager**:设置集群参数,如instanceId、集群节点的数量(numInstances)等。 3. **启动Scheduler**...

    Quartz定时任务学习.doc

    6. **JobDataMap**:这是一个键值对的数据结构,用于存储作业执行所需的参数和数据。这些参数可以在触发器触发作业时传递。 7. **JobListener**和**TriggerListener**:这两种监听器接口用于监听作业的执行状态和...

    QuartzStudy.zip

    1. **JobStore**:Quartz提供了多种JobStore实现,如RAMJobStore(内存存储)和SQLJobStore(数据库存储)。SQLJobStore是持久化的首选,因为它能在服务器重启后恢复调度信息。 2. **配置文件**:项目可能包含`...

    quarz jar 全

    6. **集成与配置**:Quartz 可以轻松集成到任何 Java 应用中,通常通过 XML 配置文件来定义作业和触发器。此外,它还支持 Spring 的集成,使得在 Spring 容器中管理和配置 Quartz 更加方便。 7. **并发与线程安全**...

    spring quartz学习总结: cluster的配置和示例

    6. **示例代码** ```java @Configuration public class QuartzConfig { @Autowired private DataSource dataSource; @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean ...

    quartz系列之九:存储

    在配置Quartz时,可以通过`org.quartz.jobStore.class`属性来指定使用的JobStore实现。 博客中可能还会提到Quartz的触发器状态管理,包括PAUSED(暂停)、WAITING(等待)、ACQUIRED(已获取)、COMPLETE(完成)等...

    quartz-2.2.3-官方文档数据及PDM表结构.zip

    6. **插件(Plugins)**:Quartz提供了多种插件,如EmailTriggerListener(邮件触发监听器)和StatefulJob(有状态的Job),它们可以扩展Quartz的功能,例如在任务完成后发送通知邮件,或者确保Job的并发执行控制。...

Global site tag (gtag.js) - Google Analytics