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 TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
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> 如:JobBuilder、TriggerBuilder
2)Factory模式最终由Scheduler的来进行组合各种组件 <Factory> 如SchedulerFactory
3)Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
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的直接实现,通过它可以直接构建Scheduler、threadpool 等
ThreadExecutor / DefaultThreadExecutor -- 内部线程操作对象
2)JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例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块:Factory、Bulider、Scheduler、Trigger、JOB
8.思想print?
1 // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory
1 // 开发者亦可自行实现自己的Factory;Job、Trigger等组件
1 SchedulerFactory sf = new StdSchedulerFactory();
1
1 // 2、通过SchedulerFactory构建Scheduler对象
1 Scheduler sched = sf.getScheduler();
1
1 // 3、org.quartz.DateBuilder.evenMinuteDate -- 通过DateBuilder构建Date
1 Date runTime = evenMinuteDate( new Date());
1
1 // 4、org.quartz.JobBuilder.newJob <下一分钟> --通过JobBuilder构建Job
1 JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();
1
1 // 5、通过TriggerBuilder进行构建Trigger
1 Trigger trigger = newTrigger().withIdentity("trigger1","group1")
1 .startAt(runTime).build();
1
1 // 6、工厂模式,组装各个组件<JOB,Trigger>
1 sched.scheduleJob (job, trigger);
1
1 // 7、start
1 sched.start();
1
1 try {
1 Thread.sleep(65L * 1000L);
1 } catch (Exception e) {
1 }
1
1 // 8、通过Scheduler销毁内置的Trigger和Job
1 sched.shutdown(true);
9.一句话看懂Quartz
1、创建调度工厂(); //工厂模式
2、根据工厂取得调度器实例(); //工厂模式
3、Builder模式构建子组件<Job,Trigger> // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
4、通过调度器组装子组件 调度器.组装<子组件1,子组件2...> //工厂模式
5、调度器.start(); //工厂模式
- Quartz深入浅出(一)
- Quartz深入浅出(一)
- Quartz深入浅出(一)
- Quartz深入浅出(一)(二)
- Quartz深入浅出
- Quartz深入浅出
- Quartz深入浅出(二)
- Quartz深入浅出(二)
- Quartz教程一:使用quartz
- Quartz教程一:使用quartz
- Quartz教程一:使用quartz
- Quartz教程一:使用quartz
- Quartz教程一:使用quartz
- Quartz教程一--使用Quartz
- Spring-Quartz (一)
- quartz的使用(一)
- quartz初探(一)
- Quartz(一)
- 类printf函数中[.*]的巧用场景
- 二叉树遍历
- 5个经典的JavaScript面试基础问题
- 北漂的日子
- JAVA中运用数组的四种排序方法
- Quartz深入浅出(一)
- Json数据解析代码demo
- java.net.Socket
- Merge k Sorted Lists
- Nginx源码图
- HDU 5014 贪心
- Oracle11gR2 安装 OWB 笔记(一)
- IOS中过滤HTML标签
- 转JVM虚拟机参数分析