Quartz2 定时器 《一》(概述)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
Quartz2?
?????說白了,就是個(gè)功能比較完善的定時(shí)器,可以通過指定的時(shí)間執(zhí)行指定的任務(wù)。
?
應(yīng)用范圍
????a.比如讓商城的活動(對象)在指定的時(shí)間(定時(shí))從發(fā)布變?yōu)榧せ?/p>
????b.比如平臺每天2:00去給用戶發(fā)送通知。
????c.本來指定商城每天2:00發(fā)通知,但是碰到了星期天(觸發(fā)器)改為1:00發(fā)通知
????定時(shí)器的應(yīng)用范圍其實(shí)很廣,上面只是簡單舉了幾個(gè)例子。
?
準(zhǔn)備
????資源下載地址:http://www.quartz-scheduler.org/
????<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>????如上在pom.xml加入要引入的jar包
?
Quartz中的設(shè)計(jì)模式
Builder模式
所有關(guān)鍵組件都有Builder模式來構(gòu)建 ?<Builder> 如:JobBuilder、TriggerBuilder
Factory模式
最終由Scheduler的來進(jìn)行組合各種組件 ?<Factory> 如SchedulerFactory
Quartz項(xiàng)目中大量使用組件模式,插件式設(shè)計(jì),可插拔,耦合性低,易擴(kuò)展,開發(fā)者可自行定義自己的Job、Trigger等組件
鏈?zhǔn)綄懛?Quartz中大量使用鏈?zhǔn)綄懛?#xff0c;與jQuery的寫法有幾分相似,實(shí)現(xiàn)也比較簡單,如:
?$(this).addClass("divCurrColor").next(".divContent").css("display","block"); ?
newTrigger().withIdentity(?"trigger3",?"group1").startAt(?startTime)
??????? .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
?
框架核心分析
?
SchedulerFactory ? ?-- 調(diào)度程序工廠
ThreadExecutor / DefaultThreadExecutor ? -- 內(nèi)部線程操作對象
StdSchedulerFactory ? -- Quartz默認(rèn)的SchedulerFactory
DirectSchedulerFactory ?--???DirectSchedulerFactory是對SchedulerFactory的直接實(shí)現(xiàn),通過它可以直接構(gòu)建Scheduler、threadpool?等
JobExecutionContext -- JOB上下文,保存著Trigger、?JobDeaitl?等信息,JOB的execute方法傳遞的參數(shù)就是對象的實(shí)例
JobExecutionContextImpl
Scheduler?? ?-- 調(diào)度器
StdScheduler ? ?--?Quartz默認(rèn)的Scheduler
RemoteScheduler ?-- 帶有RMI功能的Scheduler
JOB?--任務(wù)對象
JobDetail ?-- 他是實(shí)現(xiàn)輪詢的一個(gè)的回調(diào)類,可將參數(shù)封裝成JobDataMap對象,Quartz將任務(wù)的作業(yè)狀態(tài)保存在JobDetail中.
JobDataMap --??JobDataMap用來報(bào)錯由JobDetail傳遞過來的任務(wù)實(shí)例對象
Trigger
SimpleTrigger <普通的Trigger> -- ?SimpleScheduleBuilder
CronTrigger ?<帶Cron Like 表達(dá)式的Trigger> --?CronScheduleBuilder
CalendarIntervalTrigger <帶日期觸發(fā)的Trigger> --?CalendarIntervalScheduleBuilder
DailyTimeIntervalTrigger <按天觸發(fā)的Trigger> --?DailyTimeIntervalScheduleBuilder
ThreadPool ?--??為Quartz運(yùn)行任務(wù)時(shí)提供了一些線程
SimpleThreadPool ?--一個(gè)Quartz默認(rèn)實(shí)現(xiàn)的簡單線程池,它足夠健壯,能夠應(yīng)對大部分常用場景
實(shí)現(xiàn)思想:
//?1、工廠模式?構(gòu)建Scheduler的Factory,其中STD為Quartz默認(rèn)的Factory?? //????開發(fā)者亦可自行實(shí)現(xiàn)自己的Factory;Job、Trigger等組件??SchedulerFactory?sf?=?new?StdSchedulerFactory();??//?2、通過SchedulerFactory構(gòu)建Scheduler對象??Scheduler?sched?=?sf.getScheduler();??//?3、org.quartz.DateBuilder.evenMinuteDate??--?通過DateBuilder構(gòu)建Date??Date?runTime?=?evenMinuteDate(?new?Date());??//?4、org.quartz.JobBuilder.newJob?<下一分鐘>?--通過JobBuilder構(gòu)建Job??JobDetail?job?=?newJob(HelloJob.class).withIdentity("job1","group1").build();??//這里指定的HelloJob.class是job1的實(shí)現(xiàn)//?5、通過TriggerBuilder進(jìn)行構(gòu)建Trigger?? Trigger?trigger?=?newTrigger().withIdentity("trigger1","group1")??.startAt(runTime).build();??//?6、工廠模式,組裝各個(gè)組件<JOB,Trigger>?---???表示創(chuàng)建sched.scheduleJob?(job,?trigger);??//?7、start??? sched.start();??try?{??Thread.sleep(65L?*?1000L);?? }?catch?(Exception?e)?{?? }??//?8、通過Scheduler銷毀內(nèi)置的Trigger和Job?? sched.shutdown(true);?
一句話實(shí)現(xiàn):
? ?1、創(chuàng)建調(diào)度工廠(); ? ?//工廠模式
? ?2、根據(jù)工廠取得調(diào)度器實(shí)例(); ?//工廠模式
? ?3、Builder模式構(gòu)建子組件<Job,Trigger> ?//?builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
? ?4、通過調(diào)度器組裝子組件 ? 調(diào)度器.組裝<子組件1,子組件2...> ?//工廠模式
? ?5、調(diào)度器.start();?//工廠模式
**************************************************************************************************
********來源:http://blog.csdn.net/chenweitang123/article/details/37777399**********
**************************************************************************************************
?
轉(zhuǎn)載于:https://my.oschina.net/gxiao/blog/551168
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Quartz2 定时器 《一》(概述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车服务架构(SOA)开发设计
- 下一篇: [win7] 去除将窗口拖到屏幕边缘时“