首页 > 代码库 > Quartz深入浅出(一)

Quartz深入浅出(一)

  1. 什么是Quartz
    1. Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.
  2. Quartz能干什么/应用场景
    1. 如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler操作.
    2. 网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.
  3. 同类框架对比
    1. TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
  4. 资源
    1. 官网:http://www.quartz-scheduler.org/
    2. 下载:http://www.quartz-scheduler.org/downloads
    3. 源代码 svn:http://svn.terracotta.org/svn/quartz
    4. 本文章采用的是2.21版本:CSDN下载,亦可在官网进行下载
    5. 例子Demo:整理好后上传
  5. 框架分析
    1. 接口
    2. 类图
  6. Quartz中的设计模式
    1. Builder模式
      1. 所有关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder
    2. Factory模式
      1. 最终由Scheduler的来进行组合各种组件  <Factory> 如SchedulerFactory
    3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
  7. 框架核心分析
    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涉及到的一些关键对象,详细的内容如有机会会在后续的文章中展开!
  8. Quartz类图

    1. 类图中主要分为5块:Factory、Bulider、Scheduler、Trigger、JOB
  9. 思想
    1.     // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory,开发者亦可自行实现自己的Factory; Job、Trigger等组件
          SchedulerFactory sf = new StdSchedulerFactory();
         
          // 2、通过SchedulerFactory获得Scheduler对象
          Scheduler sched = sf.getScheduler();

          // org.quartz.DateBuilder.evenMinuteDate  -- 通过DateBuilder构建
          Date runTime = evenMinuteDate( new Date());

          // org.quartz.JobBuilder.newJob --通过JobBuilder构建Job
          JobDetail job = newJob(HelloJob. class).withIdentity("job1" , "group1" ).build();

          // 通过TriggerBuilder进行构建
          Trigger trigger = newTrigger().withIdentity( "trigger1", "group1").startAt(runTime).build();

          // 工厂模式,组装各个组件<JOB,Trigger>
          sched.scheduleJob (job, trigger);

          sched.start();
          try {
            Thread.sleep(65L * 1000L);
          } catch (Exception e) {
          }

          // 通过Scheduler销毁内置的Trigger和Job
          sched.shutdown(true);
  10. 一句话看懂Quartz
    1.    1、创建调度工厂();    //工厂模式
         2、根据工厂取得调度器实例();  //工厂模式
         3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
         4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式
         5、调度器.start(); //工厂模式
    2.    -----by weeks 2014-07-14 23:44:42