Quartz

一、Quartz介绍

  在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等。Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合,功能灰常强大,轻轻松松就能与Spring集成,使用方便。

二、Quartz中的概念

  主要有三个核心概念:调度器、任务和触发器。三者关系简单来说就是,调度器负责调度各个任务,到了某个时刻或者过了一定时间,触发器触动了,特定任务便启动执行。概念相对应的类和接口有:

  1)JobDetail:望文生义就是描述任务的相关情况;

  2)Trigger:描述出发Job执行的时间触发规则。有SimpleTrigger和CronTrigger两个子类代表两种方式,一种是每隔多少分钟小时执行,则用SimpleTrigger;另一种是日历相关的重复时间间隔,如每天凌晨,每周星期一运行的话,通过Cron表达式便可定义出复杂的调度方案。

  3)Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail要注册到Scheduler中才会生效,也就是让调度器知道有哪些触发器和任务,才能进行按规则进行调度任务。

 

    1. SchedulerFactory    -- 调度程序工厂
      1. StdSchedulerFactory   -- Quartz默认的SchedulerFactory
      2. DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 等
        1. ThreadExecutor / DefaultThreadExecutor   -- 内部线程操作对象
    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默认实现的简单线程池,它足够健壮,能够应对大部分常用场景
    7. -----以上是Quartz涉及到的一些关键对象,详细的内容如有机会会在后续的文章中展开!
  1. Quartz类图
    1. 类图中主要分为5块:Factory、Bulider、Scheduler、Trigger、JOB
  2. 思想
    1. [java] view plain copy
       
      1. // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory  
      2. //    开发者亦可自行实现自己的Factory;Job、Trigger等组件  
      3. SchedulerFactory sf = new StdSchedulerFactory();  
      4.   
      5. // 2、通过SchedulerFactory构建Scheduler对象  
      6. Scheduler sched = sf.getScheduler();  
      7.   
      8. // 3、org.quartz.DateBuilder.evenMinuteDate  -- 通过DateBuilder构建Date  
      9. Date runTime = evenMinuteDate( new Date());  
      10.   
      11. // 4、org.quartz.JobBuilder.newJob <下一分钟> --通过JobBuilder构建Job  
      12. JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();  
      13.   
      14. // 5、通过TriggerBuilder进行构建Trigger  
      15. Trigger trigger = newTrigger().withIdentity("trigger1","group1")  
      16.             .startAt(runTime).build();  
      17.   
      18. // 6、工厂模式,组装各个组件<JOB,Trigger>  
      19. sched.scheduleJob (job, trigger);  
      20.   
      21. // 7、start   
      22. sched.start();  
      23.   
      24. try {  
      25.   Thread.sleep(65L * 1000L);  
      26. catch (Exception e) {  
      27. }  
      28.   
      29. // 8、通过Scheduler销毁内置的Trigger和Job  
      30. sched.shutdown(true);  
      、创建调度工厂();    //工厂模式
         2、根据工厂取得调度器实例();  //工厂模式
         3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
         4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式
         5、调度器.start(); //工厂模式
posted @ 2017-05-24 13:49  Scaner  阅读(59)  评论(0)    收藏  举报