(一)Quartz單機(jī)
1.Quartz簡介
Quartz是一個(gè)完全由java編寫的開源作業(yè)調(diào)度框架,能實(shí)現(xiàn)業(yè)務(wù)的定時(shí)調(diào)度。Quartz主要有三個(gè)核心調(diào)度器、任務(wù)和觸發(fā)器:
①任務(wù)-JobDetail:Quartz在任務(wù)調(diào)度的時(shí)候,需要?jiǎng)?chuàng)建一個(gè)任務(wù)實(shí)例,JobDetail正是承擔(dān)這個(gè)角色。在Quartz2.0以前的版本中,創(chuàng)建一個(gè)任務(wù)通過new JobDetail(String jobName, String gruop, Class jobCLass)這個(gè)方法來創(chuàng)建,在2.0之后的版本中通過JobBuilder來創(chuàng)建任務(wù)。Job接口中只有一個(gè)方法void execute(JobExecutionContext context) throws JobExecutionException,因此在任務(wù)調(diào)度時(shí),只需要實(shí)現(xiàn)execute方法就可以了,使用起來很方便。
②觸發(fā)器-Trigger:定義Job的執(zhí)行時(shí)間、次數(shù)等信息,有SimpleTrigger和CronTrigger兩種類型。當(dāng)你需要的是一次性的調(diào)度,或者你需要在指定的時(shí)間激活某個(gè)任務(wù)并執(zhí)行N次,設(shè)置每次任務(wù)執(zhí)行的間隔時(shí)間T。那此時(shí)使用SimpleTrigger將是非常方便的。如果你想在每周的周一7:00或者每月的第2,3天實(shí)現(xiàn)任務(wù)調(diào)度,這時(shí)候就需要用到CronTrigger,CronTrigger能夠提供復(fù)雜的觸發(fā)器表達(dá)式滿足我們的需求。同時(shí)需要提到的一點(diǎn)是Quartz還提供很多日期的實(shí)現(xiàn)類DateBuilder等,在實(shí)際使用中很方便。
③調(diào)度器-Scheduler:Quartz框架的核心是調(diào)度器。調(diào)度器負(fù)責(zé)管理Quartz應(yīng)用運(yùn)行時(shí)環(huán)境。調(diào)度器不是靠自己做所有的工作,而是依賴框架內(nèi)一些非常重要的部件。Quartz不僅僅是線程和線程管理。為確保可伸縮性,Quartz采用了基于多線程的架構(gòu)。啟動(dòng)時(shí),框架初始化一套worker線程,這套線程被調(diào)度器用來執(zhí)行預(yù)定的作業(yè)。這就是Quartz怎樣能并發(fā)運(yùn)行多個(gè)作業(yè)的原理。Quartz依賴一套松耦合的線程池管理部件來管理線程環(huán)境。
2.搭建Quartz工程
①創(chuàng)建一個(gè)新工程
新建文件lib作為外部jar包,Quartz最新版本通過官網(wǎng)可以下載http://www.quartz-scheduler.org/downloads/。導(dǎo)入你下載的quartz包,新建package為com.example.singleQuartz,里面就兩個(gè)簡單的類SingleQuartzJob和SingleQuartzServer。SingleQuartzJob定義Job的實(shí)現(xiàn)類,SingleQuartzServer任務(wù)調(diào)度服務(wù)。
②SingleQuartzJob.java定義