Quartz2 定时器 《一》(概述)

Quartz2 
     说白了,就是个功能比较完善的定时器,能够经过指定的时间执行指定的任务。css

 

应用范围设计模式

    a.好比让商城的活动(对象)在指定的时间(定时)从发布变为激活框架

    b.好比平台天天2:00去给用户发送通知。ui

    c.原本指定商城天天2:00发通知,可是碰到了星期天(触发器)改成1:00发通知this

    定时器的应用范围其实很广,上面只是简单举了几个例子。spa

 

准备.net

    资源下载地址:http://www.quartz-scheduler.org/插件

    <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
    </dependency>
    <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
    </dependency>

    如上在pom.xml加入要引入的jar包线程

 

Quartz中的设计模式设计

  1. Builder模式

    1. 全部关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder

  2. Factory模式

    1. 最终由Scheduler的来进行组合各类组件  <Factory> 如SchedulerFactory

  3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义本身的Job、Trigger等组件

  4. 链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分类似,实现也比较简单,如:

    1.  $(this).addClass("divCurrColor").next(".divContent").css("display","block");  

    2. newTrigger().withIdentity( "trigger3""group1").startAt( startTime)

              .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

 

框架核心分析

 

  1. SchedulerFactory    -- 调度程序工厂

    1. ThreadExecutor / DefaultThreadExecutor   -- 内部线程操做对象

    2. StdSchedulerFactory   -- Quartz默认的SchedulerFactory

    3. DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,经过它能够直接构建Scheduler、threadpool 

  2. JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例

    1. JobExecutionContextImpl

  3. Scheduler    -- 调度器

    1. StdScheduler    -- Quartz默认的Scheduler

    2. RemoteScheduler  -- 带有RMI功能的Scheduler

  4. JOB --任务对象

    1. JobDetail  -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的做业状态保存在JobDetail中.

    2. JobDataMap --  JobDataMap用来报错由JobDetail传递过来的任务实例对象

  5. Trigger

    1. SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder

    2. CronTrigger  <带Cron Like 表达式的Trigger> -- CronScheduleBuilder

    3. CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder

    4. DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder

  6. ThreadPool  --  为Quartz运行任务时提供了一些线程

    1. SimpleThreadPool  --一个Quartz默认实现的简单线程池,它足够健壮,可以应对大部分经常使用场景

实现思想:

// 一、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory  
//    开发者亦可自行实现本身的Factory;Job、Trigger等组件  
    SchedulerFactory sf = new StdSchedulerFactory();  
  
// 二、经过SchedulerFactory构建Scheduler对象  
    Scheduler sched = sf.getScheduler();  
  
// 三、org.quartz.DateBuilder.evenMinuteDate  -- 经过DateBuilder构建Date  
    Date runTime = evenMinuteDate( new Date());  
  
// 四、org.quartz.JobBuilder.newJob <下一分钟> --经过JobBuilder构建Job  
    JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();  
  //这里指定的HelloJob.class是job1的实现
  
// 五、经过TriggerBuilder进行构建Trigger  
Trigger trigger = newTrigger().withIdentity("trigger1","group1")  
            .startAt(runTime).build();  
  
// 六、工厂模式,组装各个组件<JOB,Trigger> ---   表示建立
    sched.scheduleJob (job, trigger);  
  
// 七、start   
sched.start();  
  
try {  
  Thread.sleep(65L * 1000L);  
} catch (Exception e) {  
}  
  
// 八、经过Scheduler销毁内置的Trigger和Job  
sched.shutdown(true);

 

一句话实现:

   一、建立调度工厂();    //工厂模式

   二、根据工厂取得调度器实例();  //工厂模式

   三、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

   四、经过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式

   五、调度器.start(); //工厂模式

**************************************************************************************************

********来源:http://blog.csdn.net/chenweitang123/article/details/37777399**********

**************************************************************************************************

相关文章
相关标签/搜索