学习定时任务(Quartz)

1.简介:

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.2.3。

2.使用场景:

1).

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

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

3.相关资料

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

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

maven pom:

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

4.架构的核心分析

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).Tigger
  1. SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder
  2. CronTrigger  <带Cron Like 表达式的Trigger> -- CronScheduleBuilder
  3. CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder
  4. DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder
6).ThreadPool  --  为Quartz运行任务时提供了一些线程
  1. SimpleThreadPool  --一个Quartz默认实现的简单线程池,它足够健壮,能够应对大部分常用场景
5.实例代码

    // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory
    //    开发者亦可自行实现自己的Factory;Job、Trigger等组件
    SchedulerFactory sf = new StdSchedulerFactory();
   
    // 2、通过SchedulerFactory构建Scheduler对象
    Scheduler sched = sf.getScheduler();

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

    // 4、org.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、工厂模式,组装各个组件<JOB,Trigger>
    sched.scheduleJob (job, trigger);

    // 7、start
    sched.start();

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

    // 8、通过Scheduler销毁内置的Trigger和Job
    sched.shutdown(true);

6.总结

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值