Quartz框架介绍

一、Quartz概述:

       Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间。其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。主要用来执行定时任务,如:定时发送信息、定时生成报表等等

二、相关术语:

三、Quartz的体系结构简介:

       Quartz框架主要核心组件包括调度器、触发器、作业。调度器作为作业的总指挥,触发器作为作业的操作者,作业为应用的功能模块。其关系如下图所示

    Job为作业的接口,为任务调度的对象;JobDetail用来描述Job的实现类及其它相关的静态信息;Trigger做为作业的定时管理工具,一个Trigger只能对应一个作业实例,而一个作业实例可对应多个触发器;Scheduler做为定时任务容器,是quartz最上层的东西,它提携了所有触发器和作业,使它们协调工作,每个Scheduler都存有JobDetail和Trigger的注册,一个Scheduler中可以注册多个JobDetail和多个Trigger。

 

1、Job

      Job是一个接口,只有一个方法void execute(JobExecutionContext context),被调度的作业(类)需实现该接口中execute()方法,JobExecutionContext类提供了调度上下文的各种信息。每次执行该Job均重新创建一个Job实例,如:

public class DDNJob implements Job{  
  
    public void execute(JobExecutionContext arg0) throws JobExecutionException {  
        perform();  
    }  
      
    public void perform(){ //执行报表统计入口函数    
        //业务逻辑    
                System.out.println("自动DDN预授权开始执行-------------执行时间:"+new Date());    
        }    
} 

注:DDNJob类为需要定时执行的类,execute为定时执行的方法。一个定时任务对应一个Job实现类。

2、JobDetail

Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail,

  JobDetail jobDetail = new JobDetail("myJob","myGroup",DDNJob.class);

 说明:    
  myJob:job 名     
  myGroup:job 组(为'null'时,使用缺省的组sched.DEFAULT_GROUP)     
  DDNJob.class:要被执行的Java类

3、Trigger

Trigger是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;Spring中applicationContext.xml配置如下:

SimpleTrigger使用示例:

// Initiate SimpleTrigger with its name and group name  
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger","triggerGroup1");  
// set its start up time  
simpleTrigger.setStartTime(new Date(System.currentTimeMillis()));  
// set the interval, how often the job should run (10 seconds here)   
simpleTrigger.setRepeatInterval(10000);  
// set the number of execution of this job, set to 10 times.  
simpleTrigger.setRepeatCount(10);  

CronTrigger使用示例:

// Initiate CronTrigger with its name and group name  
CronTrigger cronTrigger = new CronTrigger("cronTrigger","triggerGroup2");  
try {  
    // setup CronExpression  
     CronExpression cexp = new CronExpression("0/5 * * * * ?");  
// Assign the CronExpression to CronTrigger  
     cronTrigger.setCronExpression(cexp);  
} catch (Exception e) {  
       e.printStackTrace();  
}  

4、Scheduler

        Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。Trigger和JobDetail可以注册到Scheduler中;Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。         Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。 应用示例:   

SchedulerFactory schedulerFactory = new StdSchedulerFactory();  
    // Retrieve a scheduler from schedule factory  
    Scheduler scheduler = schedulerFactory.getScheduler();  
     …  
    // schedule a job with JobDetail and Trigger  
     scheduler.scheduleJob(jobDetail, simpleTrigger);  
    // start the scheduler  
    scheduler.start();  

四、总结:

       我们不只有一种两种方法来实现我们的定时任务,就我知道的出了我们的quartz框架之外,我们spring也自己封装有自己的定时器,再加上各种开源的插件。那我工作的公司来说,我们用windows服务来完成这个定时任务,万变不离其宗,理解了他们的原理以及精髓,我们就可以去创新,去写出符合自己要求的工具了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz框架是一个用于调度和执行定时任务的开源框架,其原理可以概括如下: 1. 调度器(Scheduler):Quartz框架的核心组件,负责管理和调度定时任务的执行。调度器可以创建多个执行线程,并根据配置的策略决定任务的执行时间和频率。 2. 作业(Job):表示要执行的具体任务逻辑。可以通过实现Job接口或继承Quartz提供的抽象类(如QuartzJobBean)来定义作业。每个作业都有一个唯一的标识符,用来在调度器中进行管理。 3. 触发器(Trigger):用于触发作业的执行。触发器定义了作业何时被执行的时间表。Quartz框架提供了多种类型的触发器,如SimpleTrigger、CronTrigger等,可以根据具体需求选择合适的触发器类型。 4. 作业存储(JobStore):用于存储作业和触发器的信息。Quartz框架提供了多种作业存储的实现方式,如RAMJobStore、JDBCJobStore等。作业存储负责维护作业和触发器的状态,并提供查询、删除、更新等操作。 5. 监听器(Listener):用于监听作业和触发器的状态变化,如作业执行前后、触发器触发前后等。通过实现监听器接口,可以自定义监听器来处理特定的事件。 Quartz框架的工作流程如下: 1. 配置调度器:创建调度器实例,并配置相关属性,如线程池大小、作业存储方式等。 2. 定义作业和触发器:创建作业实例,并定义触发器的执行时间表。将作业和触发器关联起来。 3. 启动调度器:调用调度器的start方法,启动调度器,开始定时任务的调度和执行。 4. 调度执行:根据触发器的定义,调度器会根据预定的时间表触发作业的执行。调度器会选择一个可用的执行线程来执行作业。 5. 监听和处理事件:根据配置的监听器,监听作业和触发器的状态变化,如作业执行前后、触发器触发前后等。根据监听器的逻辑处理相应的事件。 6. 停止调度器:当不再需要定时任务时,可以调用调度器的shutdown方法,停止调度器的运行。 总的来说,Quartz框架通过调度器、作业、触发器、作业存储和监听器等组件的协作,实现了定时任务的调度和执行。通过配置和管理这些组件,可以灵活地实现各种定时任务的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值