Quartz深入浅出(一)

来源:互联网 发布:淘宝试用提高成功率 编辑:程序博客网 时间:2024/06/02 02:06

1.什么是QuartzQuartz是一个开源的作业调度框架,java编写,.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.

2.Quartz能干什么/应用场景如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler的操作,定时对人物进行更新属性操作,更改定时任务执行时间.

    1)网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.

    2)企业中如每天凌晨2点触发数据同步、发送Email等操作

    3)同类框架对比TimeTask TimeTaskQuartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.

3.资源

1)官网:http://www.quartz-scheduler.org/

 2)下载:http://www.quartz-scheduler.org/downloads

3)maven pom

<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

4.Quartz中的设计模式

    1)Builder模式所有关键组件都有Builder模式来构建  <Builder> :JobBuilderTriggerBuilder

    2)Factory模式最终由Scheduler的来进行组合各种组件  <Factory> SchedulerFactory

3)Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的JobTrigger等组件

    4)链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如: $(this).addClass("divCurrColor").next(".divContent").css("display","block");  

newTrigger().withIdentity( "trigger3""group1").startAt( startTime).withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

6.框架核心分析

1)SchedulerFactory    -- 调度程序工厂

    (1)StdSchedulerFactory   -- Quartz默认的SchedulerFactory

    (2)DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Schedulerthreadpool 

    ThreadExecutor / DefaultThreadExecutor   -- 内部线程操作对象

    2)JobExecutionContext -- JOB上下文,保存着Trigger JobDeaitl 等信息,JOBexecute方法传递的参数就是对象的实例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运行任务时提供了一些线程

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

    7)-----以上是Quartz涉及到的一些关键对象,详细的内容如有机会会在后续的文章中展开!

7.Quartz类图:

类图中主要分为5:FactoryBuliderSchedulerTriggerJOB

8.思想print?

// 1、工厂模式 构建SchedulerFactory,其中STDQuartz默认的Factory  

//    开发者亦可自行实现自己的Factory;JobTrigger等组件  

SchedulerFactory sf = new StdSchedulerFactory();  

  

// 2、通过SchedulerFactory构建Scheduler对象  

Scheduler sched = sf.getScheduler();  

  

// 3org.quartz.DateBuilder.evenMinuteDate  -- 通过DateBuilder构建Date  

Date runTime = evenMinuteDate( new Date());  

  

// 4org.quartz.JobBuilder.newJob <下一分钟> --通过JobBuilder构建Job  

JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();  

  

// 5、通过TriggerBuilder进行构建Trigger  

Trigger trigger = newTrigger().withIdentity("trigger1","group1")  

            .startAt(runTime).build();  

  

// 6、工厂模式,组装各个组件<JOBTrigger>  

sched.scheduleJob (job, trigger);  

  

// 7start   

sched.start();  

  

try {  

  Thread.sleep(65L * 1000L);  

catch (Exception e) {  

}  

  

// 8、通过Scheduler销毁内置的TriggerJob  

sched.shutdown(true);  

9.一句话看懂Quartz   

   1、创建调度工厂();    //工厂模式

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

   3Builder模式构建子组件<Job,Trigger>  // builder模式JobBuilderTriggerBuilderDateBuilder

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

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

 

0 0
原创粉丝点击