首页 > 代码库 > Quartz深入浅出(一)
Quartz深入浅出(一)
- 什么是Quartz
- Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.
- Quartz能干什么/应用场景
- 如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler操作.
- 网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.
- 同类框架对比
- TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
- 资源
- 官网:http://www.quartz-scheduler.org/
- 下载:http://www.quartz-scheduler.org/downloads
- 源代码 svn:http://svn.terracotta.org/svn/quartz
- 本文章采用的是2.21版本:CSDN下载,亦可在官网进行下载
- 例子Demo:整理好后上传
- 框架分析
- 接口
- 类图
- Quartz中的设计模式
- Builder模式
- 所有关键组件都有Builder模式来构建 <Builder> 如:JobBuilder、TriggerBuilder
- Factory模式
- 最终由Scheduler的来进行组合各种组件 <Factory> 如SchedulerFactory
- Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
- Builder模式
- 框架核心分析
- SchedulerFactory -- 调度程序工厂
- StdSchedulerFactory -- Quartz默认的SchedulerFactory
- DirectSchedulerFactory -- DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 等
- ThreadExecutor / DefaultThreadExecutor -- 内部线程操作对象
- JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例
- JobExecutionContextImpl
- Scheduler -- 调度器
- StdScheduler -- Quartz默认的Scheduler
- RemoteScheduler -- 带有RMI功能的Scheduler
- JOB --任务对象
- JobDetail -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.
- JobDataMap -- JobDataMap用来报错由JobDetail传递过来的任务实例对象
- Trigger
- SimpleTrigger <普通的Trigger> -- SimpleScheduleBuilder
- CronTrigger <带Cron Like 表达式的Trigger> -- CronScheduleBuilder
- CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder
- DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder
- ThreadPool -- 为Quartz运行任务时提供了一些线程
- SimpleThreadPool --一个Quartz默认实现的简单线程池,它足够健壮,能够应对大部分常用场景
- -----以上是Quartz涉及到的一些关键对象,详细的内容如有机会会在后续的文章中展开!
- SchedulerFactory -- 调度程序工厂
- Quartz类图
- 类图中主要分为5块:Factory、Bulider、Scheduler、Trigger、JOB
- 思想
- // 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);
- // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory,开发者亦可自行实现自己的Factory; Job、Trigger等组件
- 一句话看懂Quartz
- 1、创建调度工厂(); //工厂模式2、根据工厂取得调度器实例(); //工厂模式3、Builder模式构建子组件<Job,Trigger> // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder4、通过调度器组装子组件 调度器.组装<子组件1,子组件2...> //工厂模式5、调度器.start(); //工厂模式
- -----by weeks 2014-07-14 23:44:42
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。