Quaryz-Job應(yīng)用

先解釋一下什么叫調(diào)度:(來自維基百科)調(diào)度在計算機中是分配工作所需資源的方法迫筑,這里的資源可以指虛擬的計算資源宪赶,如線程、進程或數(shù)據(jù)流脯燃;也可以指硬件資源搂妻,如處理器、網(wǎng)絡(luò)連接或擴展卡辕棚。進行調(diào)度工作的程序叫調(diào)度器欲主。

分布式與集群:(引用)小飯店原來只有一個廚師,切菜洗菜備料炒菜全干逝嚎。后來客人多了扁瓢,廚房一個廚師忙不過來,又請了個廚師补君,兩個廚師都能炒一樣的菜引几,這兩個廚師的關(guān)系是集群。為了讓廚師專心炒菜挽铁,把菜做到極致伟桅,又請了個配菜師負責切菜,備菜叽掘,備料楣铁,廚師和配菜師的關(guān)系是分布式,一個配菜師也忙不過來了更扁,又請了個配菜師盖腕,兩個配菜師關(guān)系是集群。

可參考這篇文章:https://blog.csdn.net/u013142781/article/details/51307229


Quartz基本概念:

它是一個優(yōu)秀的開源調(diào)度框架浓镜,有強大的調(diào)度功能溃列,應(yīng)用方式靈活(支持任務(wù)和調(diào)度的各種組合方式,支持調(diào)度數(shù)據(jù)的多種儲存方式)膛薛,有分布式和集群能力哭廉。而且,Quartz是Spring默認的調(diào)度框架相叁,很容易與Spring集成實現(xiàn)靈活可配置的調(diào)度功能。

Quartz調(diào)度核心元素:

1辽幌、Scheduler:任務(wù)調(diào)度器增淹,實際執(zhí)行任務(wù)調(diào)度的控制器,在Spring中通過SchedulerFactoryBean封裝起來乌企。

2虑润、Trigger:觸發(fā)器,用于定義任務(wù)調(diào)度的時間規(guī)則加酵,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger拳喻,其中CronTrigger用的比較多哭当。

3、Calendar:它是一些日歷特定時間點的集合冗澈。一個trigger可以包含多個Calendar钦勘,以便排除或包含某些時間點。

4亚亲、JobDetail:描述Job實現(xiàn)類及其它相關(guān)的靜態(tài)信息彻采,如Job名字、關(guān)聯(lián)監(jiān)聽器等信息捌归。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean兩種實現(xiàn)肛响,如果任務(wù)調(diào)度只需要執(zhí)行某個類的某個方法,就可以通過MethodInvokingJobDetailFactoryBean來調(diào)用惜索。

5特笋、Job:是一個接口,只有一個方法void execute(JobExecutionContext context),開發(fā)者實現(xiàn)該接口定義運行任務(wù)巾兆,JobExecutionContext類提供了調(diào)度上下文的各種信息猎物。Job運行時的信息保存在JobDataMap實例中。實現(xiàn)Job接口的任務(wù)臼寄,默認是無狀態(tài)的霸奕,若要將Job設(shè)置成有狀態(tài)的,在quartz中是給實現(xiàn)的Job添加@DisallowConcurrentExecution注解(以前是實現(xiàn)StatefulJob接口吉拳,現(xiàn)在已被Deprecated),在與spring結(jié)合中可以在spring配置文件的job detail中配置concurrent參數(shù)质帅。

Quartz集群配置:

主要通過數(shù)據(jù)庫表來感知其他的應(yīng)用的,各個節(jié)點之間并沒有直接的通信留攒。只有使用持久的JobStore才能完成Quartz集群煤惩。具體的表不加描述。

Quartz基本原理:

主要就是三個核心元素:Scheduler炼邀、trigger魄揉、job,Scheduler是實際執(zhí)行調(diào)度的控制器拭宁,trigger和Job是任務(wù)調(diào)度的元數(shù)據(jù)洛退。

Scheduler:主要有三種RemoteMBeanScheduler, RemoteScheduler 和 StdScheduler杰标。主要由Scheduler工廠創(chuàng)建DirectSchedulerFactory 或者 StdSchedulerFactory兵怯。 第二種工廠 StdSchedulerFactory 使用較多。

trigger:用于定義調(diào)度時間腔剂,按照什么時間規(guī)則去執(zhí)行任務(wù)媒区。Quartz 中主要提供了四種類型的 trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger袜漩,和 NthIncludedDayTrigger绪爸。

Job:表示被調(diào)度的任務(wù)。主要有兩種類型的 job:無狀態(tài)的(stateless)和有狀態(tài)的(stateful)宙攻。對于同一個 trigger 來說奠货,有狀態(tài)的 job 不能被并行執(zhí)行,只有上一次觸發(fā)的任務(wù)被執(zhí)行完之后粘优,才能觸發(fā)下一次執(zhí)行仇味。Job 主要有兩種屬性:volatility 和 durability,其中 volatility 表示任務(wù)是否被持久化到數(shù)據(jù)庫存儲雹顺,而 durability 表示在沒有 trigger 關(guān)聯(lián)的時候任務(wù)是否被保留丹墨。兩者都是在值為 true 的時候任務(wù)被持久化或保留。一個 job 可以被多個 trigger 關(guān)聯(lián)嬉愧,但是一個 trigger 只能關(guān)聯(lián)一個 job贩挣。

元素之間關(guān)系圖

工作原理:

IOC容器初始化時(用Spring與Quartz結(jié)合的)會創(chuàng)建并初始化Quartz線程池(TreadPool),并啟動它没酣。剛啟動時線程池中每個線程都處于等待狀態(tài)王财,等待外界給他分配Runnable(持有作業(yè)對象的線程)。

初始化并啟動Quartz的主線程(QuartzSchedulerThread)裕便,該線程自啟動后就會等待外界的信號量開始工作绒净。外界給出工作信號量之后,該主線程的run方法才實質(zhì)上開始工作偿衰。run中會獲取JobStore中下一次要觸發(fā)的作業(yè)挂疆,拿到之后會一直等待到該作業(yè)的真正觸發(fā)時間,然后將該作業(yè)包裝成一個JobRunShell對象(該對象實現(xiàn)了Runnable接口下翎,其實看是上面TreadPool中等待外界分配給他的Runnable)缤言,然后將剛創(chuàng)建的JobRunShell交給線程池,由線程池負責執(zhí)行作業(yè)视事。

線程池收到Runnable后胆萧,從線程池一個線程啟動Runnable,然后將該線程回收至空閑線程中俐东。

JobRunShell對象的run方法就是最終通過反射調(diào)用作業(yè)的地方跌穗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虏辫,隨后出現(xiàn)的幾起案子瞻离,更是在濱河造成了極大的恐慌,老刑警劉巖乒裆,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹤耍,警方通過查閱死者的電腦和手機肉迫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿黄,“玉大人喊衫,你說我怎么就攤上這事「伺拢” “怎么了族购?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陵珍。 經(jīng)常有香客問我寝杖,道長,這世上最難降的妖魔是什么互纯? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任瑟幕,我火速辦了婚禮,結(jié)果婚禮上留潦,老公的妹妹穿的比我還像新娘只盹。我一直安慰自己,他們只是感情好兔院,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布殖卑。 她就那樣靜靜地躺著,像睡著了一般坊萝。 火紅的嫁衣襯著肌膚如雪孵稽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天屹堰,我揣著相機與錄音肛冶,去河邊找鬼。 笑死扯键,一個胖子當著我的面吹牛睦袖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荣刑,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼馅笙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厉亏?” 一聲冷哼從身側(cè)響起董习,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爱只,沒想到半個月后皿淋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年窝趣,在試婚紗的時候發(fā)現(xiàn)自己被綠了疯暑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡哑舒,死狀恐怖妇拯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洗鸵,我是刑警寧澤越锈,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站膘滨,受9級特大地震影響甘凭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吏祸,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一对蒲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贡翘,春花似錦蹈矮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踊东,卻和暖如春北滥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闸翅。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工再芋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坚冀。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓济赎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親记某。 傳聞我的和親對象是個殘疾皇子司训,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355