定時(shí)任務(wù)是互聯(lián)網(wǎng)行業(yè)里最常用的服務(wù)之一,本文給大家介紹定時(shí)任務(wù)在我司的發(fā)展歷程。
linux系統(tǒng)中一般使用crontab命令來實(shí)現(xiàn),在Java世界里,使用最廣泛的就是quartz了。我司使用quartz就已經(jīng)升級(jí)了三代,每一代在上一代系統(tǒng)之上有所優(yōu)化,寫這篇文章一方面介紹一下quartz的使用,另一方面可以根據(jù)此項(xiàng)目的變遷反應(yīng)出我司平臺(tái)架構(gòu)升級(jí)的一個(gè)縮影。
定時(shí)任務(wù)的使用場(chǎng)景很多,以我們平臺(tái)來講:計(jì)息,派息、對(duì)賬等等。
quartz 介紹
Quartz是個(gè)開源的作業(yè)調(diào)度框架,為在Java應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制。Quartz允許開發(fā)人員根據(jù)時(shí)間間隔(或天)來調(diào)度作業(yè)。它實(shí)現(xiàn)了作業(yè)和觸發(fā)器的多對(duì)多關(guān)系,還能把多個(gè)作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。Quartz可以集成幾乎任何的java應(yīng)用程序—從小的單片機(jī)系統(tǒng)到大型的電子商務(wù)系統(tǒng)。Quartz可以執(zhí)行上千上萬的任務(wù)調(diào)度。
Quartz核心的概念:scheduler任務(wù)調(diào)度、Job任務(wù)、JobDetail任務(wù)細(xì)節(jié)、Trigger觸發(fā)器
Scheduler:調(diào)度器,調(diào)度器接受一組JobDetail+Trigger即可安排一個(gè)任務(wù),其中一個(gè)JobDetail可以關(guān)聯(lián)多個(gè)Trigger
Job:Job是任務(wù)執(zhí)行的流程,是一個(gè)類
JobDetail:JobDetail是Job是實(shí)例,是一個(gè)對(duì)象,包含了該實(shí)例的執(zhí)行計(jì)劃和所需要的數(shù)據(jù)
Trigger:Trigger是定時(shí)器,決定任務(wù)何時(shí)執(zhí)行
使用Quartz調(diào)度系統(tǒng)的思路就是,首先寫一個(gè)具體的任務(wù)(job),配置任務(wù)的觸發(fā)時(shí)間(Trigger),Scheduler很根據(jù)JobDetail+Trigger安排去執(zhí)行此任務(wù)。
Quartz 定時(shí)器的時(shí)間設(shè)置