`
xiaoyaoke08
  • 浏览: 99235 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Quarz 配置(一) - JobDetail

阅读更多

 

Quartz是一个开源的作业调度框架,完全由java写的,你能通过它创建简单或者复杂的任务。他能提供巨大的灵活性,但又不牺牲简单性。

 

Quartz的核心概念 :调度器、触发器、作业 

调度器(Scheduler)

Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。

要创建一个作业并能够被触发调用,必须在Scheduler上面注册一个JobDetailTrigger

Scheduler提携了所有TriggerJobDetail,使它们协调工作。这些TriggerJobDetail通过自身的namegroup属性区分

       Scheduler SchedulerFactory产生,我们可以通过以下方式获取Scheduler的实例:

     //ServletContext上下文中查找SchedulerFactory

     SchedulerFactory   factory = (SchedulerFactory)

ServletActionContext.getServletContext().getAttribute("org.quartz.impl.StdSchedulerFactory.KEY");

 

   //获取Scheduler对象

   Scheduler defScheduler = factory.getScheduler();

作业

Job

任务,其实就是一个接口。要创建一个任务,必须得实现这个接口。该接口只有一个execute方法,任务每次被调用的时候都会执行这个execute方法的逻辑。

public class TestJob impletemens org.quartz.Job{

         @Override

         public void execute(JobExecutionContext context) throws JobExecutionException{

                   // you business logic

                   // …

                 System.out.println("########### this is testJob running  ############");

     }

}

 

JobDetail

JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail。下面是JobDetail的一些常用的属性和含义

 

 

参数名

类型

备注

name

String

任务的名称,必须

group

String

任务所在组,默认为DEFAULT

jobClass

Class

任务的实现类,必须

description

String

描述

jobDataMap

JobDataMap

用来给作业提供数据支持的数据结构

volatility

Boolean

重启应用之后是否删除任务的相关信息,默认false

durability

Boolean

任务完成之后是否依然保留到数据库,默认false

shouldRecover

Boolean

应用重启之后时候忽略过期任务,默认false

jobListeners

Set

监听器

 

JobDataMap

这是一个给作业提供数据支持的数据结构,使用方法和java.util.Map一样,非常方便。当一个作业被分配给调度器时,JobDataMap实例就随之生成。

Job有一个StatefulJob子接口,代表有状态的任务,该接口是一个没有方法的标签接口,其目的是让Quartz知道任务的类型,以便采用不同的执行方案。无状态任务在执行时拥有自己的JobDataMap拷贝,对JobDataMap的更改不会影响下次的执行。而有状态任务共享共享同一个JobDataMap实例,每次任务执行对JobDataMap所做的更改会保存下来,后面的执行可以看到这个更改,也即每次执行任务后都会对后面的执行发生影响。

正因为这个原因,无状态的Job可以并发执行,而有状态的StatefulJob不能并发执行,这意味着如果前次的StatefulJob还没有执行完毕,下一次的任务将阻塞等待,直到前次任务执行完毕。有状态任务比无状态任务需要考虑更多的因素,程序往往拥有更高的复杂度,因此除非必要,应该尽量使用无状态的Job

如果Quartz使用了数据库持久化任务调度信息,无状态的JobDataMap仅会在Scheduler注册任务时保持一次,而有状态任务对应的JobDataMap在每次执行任务后都会进行保存。

JobDataMap实例也可以与一个触发器相关联。这种情况下,对于同一作业的不同触发器,我们可以在JobDataMap中添加不同的数据,以便作业在不同时间执行时能够提供更为灵活的数据支持(学校上午放眼保健操录音第一版,下午放第二版)。

不管是有状态还是无状态的任务,在任务执行期间对TriggerJobDataMap所做的更改都不会进行持久,也即不会对下次的执行产生影响。

 

 

 

分享到:
评论

相关推荐

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

    内容提要:配置、创建并运行 Quartz RMI 端户端,演示了 Quartz RMI 客户端通过远程调度器部署一个 Job 的 的例子。 第十章. J2EE 中使用 Quartz (第一部分) 内容提要:J2EE 中引入 Quartz。在 J2EE 环境中作为 ...

    Spring3.2.4+Quartz2.2.0 Demo

    quartz-1.8以前的配置 class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <value>0/1 * * * * ? --> <!-- quartz-2.x的配置 --> ...

    quartz声明事j2EE实现

    quartz quartz-1.5.2.jar quartz.properties quartz_job.xml 实现在J2ee下quartz声明事CornTrigger,jobDetail的配置文件和类

    quartz的基本使用,配置job,jobdetail,trigger,Scheduler

    通过CronScheduleBuilder、SimpleScheduleBuilder设置时间规则。

    Spring2.0+quartz1.8定时执行任务内含Cron表达式生成器

    现有需求需要每天早上2点和下午5点执行一个方法Synchronization.run(): <!-- 调用频率设置 每天上午2点和下午5点 cron表达式 --> <bean id="runTime" class="org.springframework.scheduling.quartz....

    quartz的分布式调度大致分两种方式实现

    二.TerracottaJobStore的配置(无数据库的集群) 本文介绍的是JDBC-Jobstore基于数据库的集群: 1.目前,群集仅适用于JDBC-Jobstore(JobStoreTX或JobStoreCMT),通过使群集的每个节点共享相同的数据库来工作。...

    spring定时器轻松搞定

    java类代码: import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * 定时器 * @author Administrator ...另外加入一个quartz-all-1.6.0.jar包就OK

    tomcat8 + nginx + memcached + cas 实现负载均衡的配置包

    1,tomcat8的配置: 1.1修改tomcat8.x/conf/context.xml的配置如下: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license ...

    quartz1.6.5+Hibernate+Spring整合Demo

    quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...

    spring定时任务

    <bean id="sayHelloJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <value>com.test.Test</value> <!-- 关键在如下两个触发器的配置 --> <!-- 类似于Java的简单触发器 --> ...

    Quartz定时任务调度1

    2、JobDetail是一个可执行的工作,它本身可能是有状态的 3、Trigger触发器代表一个调度参数的配置,什么时候去调 4、当JobDetail和Trig

    quartz 包,源文件与 使用说明

    JobDetail类:具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。 JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。 JobDataMap类:用于描述一个...

    quartz1.6.5+Spring+Hibernate

    quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...

    springjdbc

    <property name="jobDetail" ref="querytestController" /> <bean id="sfb2" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <ref bean="querytestControllerTrigger" /> ...

    Spring.3.x企业应用开发实战(完整版).part2

    7.7.1 一个简单切面的配置 7.7.2 配置命名切点 7.7.3 各种增强类型的配置 7.7.4 绑定连接点信息 7.7.5 Advisor配置 7.8 混合切面类型 7.8.1 混合使用各种切面类型 7.8.2 各种切面类型总结 7.9 JVM Class文件字节码...

    Spring3.x企业应用开发实战(完整版) part1

    7.7.1 一个简单切面的配置 7.7.2 配置命名切点 7.7.3 各种增强类型的配置 7.7.4 绑定连接点信息 7.7.5 Advisor配置 7.8 混合切面类型 7.8.1 混合使用各种切面类型 7.8.2 各种切面类型总结 7.9 JVM Class文件字节码...

Global site tag (gtag.js) - Google Analytics