Quartz2 定時器 《一》(概述)

為什么80%的碼農都做不了架構師?>>> ??hot3.png

Quartz2?
?????說白了,就是個功能比較完善的定時器,可以通過指定的時間執行指定的任務。

?

應用范圍

????a.比如讓商城的活動(對象)在指定的時間(定時)從發布變為激活

????b.比如平臺每天2:00去給用戶發送通知。

????c.本來指定商城每天2:00發通知,但是碰到了星期天(觸發器)改為1:00發通知

????定時器的應用范圍其實很廣,上面只是簡單舉了幾個例子。

?

準備

????資源下載地址: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中的設計模式

  1. Builder模式

    1. 所有關鍵組件都有Builder模式來構建 ?<Builder> 如:JobBuilder、TriggerBuilder

  2. Factory模式

    1. 最終由Scheduler的來進行組合各種組件 ?<Factory> 如SchedulerFactory

  3. Quartz項目中大量使用組件模式,插件式設計,可插拔,耦合性低,易擴展,開發者可自行定義自己的Job、Trigger等組件

  4. 鏈式寫法,Quartz中大量使用鏈式寫法,與jQuery的寫法有幾分相似,實現也比較簡單,如:

    1. ?$(this).addClass("divCurrColor").next(".divContent").css("display","block"); ?

    2. newTrigger().withIdentity(?"trigger3",?"group1").startAt(?startTime)

      ??????? .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

?

框架核心分析

?

  1. SchedulerFactory ? ?-- 調度程序工廠

    1. ThreadExecutor / DefaultThreadExecutor ? -- 內部線程操作對象

    2. StdSchedulerFactory ? -- Quartz默認的SchedulerFactory

    3. DirectSchedulerFactory ?--???DirectSchedulerFactory是對SchedulerFactory的直接實現,通過它可以直接構建Scheduler、threadpool?

  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. Trigger

    1. SimpleTrigger <普通的Trigger> -- ?SimpleScheduleBuilder

    2. CronTrigger ?<帶Cron Like 表達式的Trigger> --?CronScheduleBuilder

    3. CalendarIntervalTrigger <帶日期觸發的Trigger> --?CalendarIntervalScheduleBuilder

    4. DailyTimeIntervalTrigger <按天觸發的Trigger> --?DailyTimeIntervalScheduleBuilder

  6. ThreadPool ?--??為Quartz運行任務時提供了一些線程

    1. SimpleThreadPool ?--一個Quartz默認實現的簡單線程池,它足夠健壯,能夠應對大部分常用場景

實現思想:

//?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();??//這里指定的HelloJob.class是job1的實現//?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);

?

一句話實現:

? ?1、創建調度工廠(); ? ?//工廠模式

? ?2、根據工廠取得調度器實例(); ?//工廠模式

? ?3、Builder模式構建子組件<Job,Trigger> ?//?builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

? ?4、通過調度器組裝子組件 ? 調度器.組裝<子組件1,子組件2...> ?//工廠模式

? ?5、調度器.start();?//工廠模式

**************************************************************************************************

********來源:http://blog.csdn.net/chenweitang123/article/details/37777399**********

**************************************************************************************************

?

轉載于:https://my.oschina.net/gxiao/blog/551168

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286142.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL 數據庫遠程備份 語句

DECLARE DATABakPath VARCHAR(200) N\\192.168.0.22\DataBak --遠程共享目錄&#xff08;備份文件夾根目錄&#xff09; DECLARE UserName VARCHAR(50) N192.168.0.22\dbuser --遠程目錄訪問用戶賬戶 DECLARE UserPwd VARCHAR(50) N123456 --遠程目錄訪問用戶密碼 DECLARE R…

九、為影院添加影片《仿淘票票系統前后端完全制作(除支付外)》

一、數據獲取 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 上一節已展示了影院頁&#xff0c;但是你點擊影院頁進入后將看不到任何數據&#xff0c;這是因為當前影院還未有添加的影片&#xff0c;本節之后將會從頁面開始完成這個功能。 首先我們應…

大話領域驅動設計——基礎設施層

概述基礎設施層是整個系統的?持層&#xff0c;通過對第三?類庫的調?或系統的抽象和集成來實現對其他層的?持。與傳統架構不同在DDD中&#xff0c;數據庫訪問的具體實現&#xff08;倉儲&#xff09;也被放在了基礎設施層。在DDD的理念中&#xff0c;基礎設施層是為領域和用…

C語言試題四十四之移動一維數組中的內容,若數組中由n個整數,要求把下標從0到p(p小于等于n-1)的數組元素平移到數組的最后。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

【MATLAB統計分析與應用100例】案例004:matlab調用smoothts函數對金融時間序列數據進行平滑處理

時間序列數據進行平滑處理效果預覽: Excel原數據部分預覽: 1. 讀取金融時間序列數據,繪制波形圖 x = xlsread(examp03_02.xls); % 從文件examp03_02.xls中讀取數據 price = x(:,4)

javaweb優化

http://blog.csdn.net/jiangzhaobao/article/details/8003244轉載于:https://www.cnblogs.com/yzjT-mac/p/5889292.html

MultiProcess-MultiThread

聽到一些關于python多進程與多線的例子&#xff0c;感覺比較經典&#xff0c;把一些例子分享一下. 內容如下&#xff1a; Process、Thread、GIL、Process fork、Multiprocessing、Queue、ProcessPool、Multiprocess-Multithread comparison (1) Process : 程序的一次執行(程序編…

【MATLAB統計分析與應用100例】案例005:matlab調用medfilt1函數對加噪正弦波信號進行平滑處理

平滑效果預覽: 文章目錄 1. 產生加噪正弦波信號,繪制加噪波形圖2. 調用medfilt1對加噪正弦波信號y進行中值濾波,并繪制波形圖1. 產生加噪正弦波信號,繪制加噪波形圖 t = linspace(0,2*pi,500); % 產生一個從0到2

十、為影院添加影片及座位安排《仿淘票票系統前后端完全制作(除支付外)》

一、選中添加功能完成 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 在上一節咱們已經完成了對應的準備工作&#xff0c;在這一節中&#xff0c;咱們只需要對其進行調用即可&#xff0c;調用前還需要處理這些數據&#xff1a; 首先選中時&#xff0…

遍歷文件夾還原數據庫SQL語句

/***** 遍歷文件夾進行數據庫還原 *******/---需要開啟xp_cmdshell 如已經開啟 可以略過 /***** Step 1 開啟 xp_cmdshell Use Master GO EXEC master.dbo.sp_configure show advanced options, 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure xp_cmdshell, 1…

聊聊 C# 和 C++ 中的 泛型模板 底層玩法

最近在看 C 的方法和類模板&#xff0c;我就在想 C# 中也是有這個概念的&#xff0c;不過叫法不一樣&#xff0c;人家叫模板&#xff0c;我們叫泛型&#xff0c;哈哈&#xff0c;有點意思&#xff0c;這一篇我們來聊聊它們底層是怎么玩的&#xff1f;一&#xff1a;C 中的模板玩…

ceph集群報 Monitor clock skew detected 錯誤問題排查,解決

ceph集群報 Monitor clock skew detected 錯誤問題排查&#xff0c;解決 告警信息如下&#xff1a; [rootceph-100-80 ceph]# ceph -w cluster ddc1b10b-6d1a-4ef9-8a01-d561512f3c1d health HEALTH_WARN clock skew detected on mon.ceph-100-81,…

Java實現畫八卦

八卦是由多個圓疊加而成&#xff0c;如果我們讓每個圓都有自己的顏色&#xff0c;那么具體結構便一目了然&#xff0c;如下圖所示&#xff1a; 顯然只要令對應的圓顏色相同&#xff0c;就能達到我們預期的效果。 用Java就能輕松畫出來&#xff1a; import java.awt.BasicStroke…

C語言試題四十五之把第1到第p個字符,平移到字符串的最后,把第p+1到最后的字符移到字符串的前部。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

【MATLAB統計分析與應用100例】案例006:matlab數據的標準化變換

文章目錄 1. 調用rand函數產生一個10行,4列的隨機矩陣,每列服從不同的均勻分布2. 調用zscore函數對x進行標準化變換(按列標準化),返回變換后矩陣xz,以及矩陣x各列的均值構成的向量mu,各列的標準差構成的向量sigma3. 變換結果1. 調用rand函數產生一個10行,4列的隨機矩陣…

十一、為影院添加影片制作準備服務《仿淘票票系統前后端完全制作(除支付外)》

一、為影院添加影片的邏輯和思考 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 進入之后找到上一節中制作的頁面&#xff0c;咱們設置點擊編輯按鈕后進入的頁面為影院添加影片頁&#xff1a; 接著咱們查看影院添加影片頁&#xff1a; 在該頁中&…

Linux 內核中斷內幕【轉】

轉自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文對中斷系統進行了全面的分析與探討&#xff0c;主要包括中斷控制器、中斷分類、中斷親和力、中斷線程化與 SMP 中的中斷遷徙等。首先對中斷工作原理進行了簡要分析&#xff0c;接著詳細探討了中斷親…

SQL Server表分區

SQL Server表分區 什么是表分區 一般情況下&#xff0c;我們建立數據庫表時&#xff0c;表數據都存放在一個文件里。 但是如果是分區表的話&#xff0c;表數據就會按照你指定的規則分放到不同的文件里&#xff0c;把一個大的數據文件拆分為多個小文件&#xff0c;還可以把這…

apt 根據注解,編譯時生成代碼

apt&#xff1a; Retention后面的值&#xff0c;設置的為CLASS&#xff0c;說明就是編譯時動態處理的。一般這類注解會在編譯的時候&#xff0c;根據注解標識&#xff0c;動態生成一些類或者生成一些xml都可以&#xff0c;在運行時期&#xff0c;這類注解是沒有的~~會依靠動態生…

Web.config配置文件詳解(新手必看)

花了點時間整理了一下ASP.NET Web.config配置文件的基本使用方法。很適合新手參看&#xff0c;由于Web.config在使用很靈活&#xff0c;可以自定義一些節點。所以這里只介紹一些比較常用的節點。 <?xml version"1.0"?> <!--注意: 除了手動編輯此文件以外&…