Quartz深入浅出

Posted 神探维拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartz深入浅出相关的知识,希望对你有一定的参考价值。

    1. 什么是Quartz
      1. Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.
    2. Quartz能干什么/应用场景
      1. 如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler的操作,定时对人物进行更新属性操作,更改定时任务执行时间.
      2. 网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.
      3. 企业中如每天凌晨2点触发数据同步、发送Email等操作
    3. 同类框架对比
      1. TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
    4. 资源
      1. 官网:http://www.quartz-scheduler.org/
      2. 下载:http://www.quartz-scheduler.org/downloads
      3. maven pom
        1. <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>
      4. 源代码 svn:http://svn.terracotta.org/svn/quartz
      5. 本文章采用的是2.21版本:CSDN下载:http://download.csdn.net/detail/chenweitang123/7636703
      6. 例子Demo:CSDN下载:整理完后上传.
    5. 框架分析
      1. 接口
      2. 类图
    6. Quartz中的设计模式
      1. Builder模式
        1. 所有关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder
      2. Factory模式
        1. 最终由Scheduler的来进行组合各种组件  <Factory> 如SchedulerFactory
      3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
      4. 链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如:
        1. "trigger3", "group1").startAt( startTime)
                  .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
    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类图

技术分享

类图中主要分为5块:Factory、Bulider、Scheduler、Trigger、JOB

9.思想

 

 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);  

 

一句话看懂Quartz

   1、创建调度工厂();    //工厂模式
   2、根据工厂取得调度器实例();  //工厂模式
   3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
   4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式
   5、调度器.start(); //工厂模式

 

以上是关于Quartz深入浅出的主要内容,如果未能解决你的问题,请参考以下文章

深入Quartz,更优雅地管理你的定时任务

Quartz深入浅出

10 -- 深入使用Spring -- 5...1 使用Quartz

JVM的深入理解:由一次Quartz的定时任务引发的“A cannot cast to A”的问题

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器