-
SimpleTrigger的作用:在指定時間執行且僅執行一次任務,或者是在指定時間間隔內多次執行任務。
舉例1:當前時間4秒后,執行定時任務并僅執行一次。
舉例2:每隔2秒鐘執行一次定時任務,通過withRepeatCount方法實現重復執行定時任務,如果withRepeatCount參數是整數,代表第一次執行之后執行定時任務的次數,如圖。
注意:endAt方法優先級大于withRepeatCount方法優先級,即使次數還沒執行完,到指定時間也會結束。
查看全部 -
Trigger定義:Quartz的觸發器,用來定義調度程序任務執行的時間,也就是觸發執行Job的時間。
Quartz框架中的Trigger架構:如圖。
1、Trigger是Builder設計模式創建的。
2、Trigger實現類很多,這里常用CronTriggerImpl和SimpleTriggerImpl這兩個Trigger實現類。
觸發器通用屬性(所有實現類擁有的屬性)
JobKey:Job實例的標識,觸發器觸發調度工具時,該Job對應的相應任務就會執行(通過JobKey可以獲取和Trigger綁定的JobDetail的一些信息)。
StartTime:觸發器的時間表,首次被觸發的時間,類型為Java.uitl.Date(可以在調度器中存儲一個觸發器,當時間到了觸發的時間調度器就會調用Job的相應任務)。
EndTime:觸發器不再被觸發的時間,它的類型為Java.uitl.Date,超過這個時間,觸發器就會執行了。
舉例:如圖,演示startTime、endTime、JobKey的使用。
1、通過Date獲取3秒后的時間。
2、觸發器執行指定觸發時間的方法(startAt()、endAt())
3、通過Trigger獲取JobKey,并且通過jobKey獲取與Trigger綁定的Job的JobDetail的相關信息。
4、通過Trigger獲取startTime和endTime的信息。
查看全部 -
舉例:如圖。
知識點1:可以通過getMergedJobDataMap()獲取JobDetail和Trigger合并的JobDataMap。但這里需要注意一點是如果Trigger和JobDetail的key相同,那么Trigger會覆蓋JobDetail。
第二種獲取傳入JobExecuteContext的參數:更直接,更簡潔。通過setter方法直接對Job里對應key值的成員變量賦值。
舉例:如圖。
知識點1:通過在實現Job接口的實現類中,定義成員變量并提供setter方法,前提成員變量的類型要和傳入的value值類型相同,名稱要和key的名稱相同。該種方式就可以不使用JobDataMap了。
查看全部 -
JobExecutionContext:它是位于Job接口的execute方法的參數位置。由于每個業務邏輯Job實例需要的參數不同,Quartz沒辦法提供帶有參數的構造函數。去給Job實例初始化參數。因此Quartz在每次執行Job時,都需要重新創建一個Job實例。并通過newInstance的反射機制調用無參構造函數,依據Job實現類的描述來實例化Job。所以想進行傳參就需要使用JobExecutionContext。(類似于Servlet訪問ServletContext那樣)通過JobExecutionContext,Job可以訪問到所處環境的所有信息(包括注射到Scheduler上與該Job相關的JobDetail和Trigger)。
JobDataMap:它支持鍵值對的形式,將自定義參數傳入JobDataMap。
獲取JobDataMap:
舉例:如圖。
知識點1:通過在創建JobDetail或者Trigger時,通過usingJobData(參數1,參數2)為JobExecuteContext參數傳入參數,如果傳入多個參數,可以通過定義多個usingJobData方法。
知識點2:可以通過JobKey或者TriggerKey實例的getName或者getGroup方法獲取JobDetail或者Trigger的唯一標識和組。而JobKey或者TriggerKey是通過JobExecuteContext參數的getJobDetail.getKey()或者getTriiger().getKey()方法獲取的。
知識點3:可以通過JobDataMap獲取傳入的參數,也就是通過傳入的key獲取value,而JobDataMap是通過JobExecuteContext實例的getJobDetail.getJobDataMap或者getTrigger.getJobDataMap獲取的。之后就可以通過JobDataMap實例的getKey("key")獲取值。
查看全部 -
Job接口:實現業務邏輯的任務接口,實現該接口需要實現execute方法,該方法類似于TimerTask的run方法。JobExecutionContext參數是Job執行的上下文,其中在該參數中有一個JobDataMap,它包含了輸入的參數。
注意:execute方法聲明拋出了一個異常,如果任務執行失敗,我們可以通過捕獲該異常來處理。避免了Timer的全崩式失敗。
Job在Quartz的生命周期:每次Scheduler執行Job時,它在調用execute方法前會根據JobDetail提供的類型創建一個Job實例。當該任務執行完畢后,會丟棄該Job實例,并且釋放的實例會被垃圾回收機制回收。
JobDetail接口:JobDetail為Job實例提供了許多設置屬性,以及JobDataMap成員變量屬性,它用來存儲特定Job實例的狀態信息,Scheduler需要借助JobDetail對象來添加Job實例。
Job的重要屬性:
name:任務的名稱,它在JobDetail中是必須項。
group:任務所在組,默認值是大寫的DEFAULT,它也是必須項。
jobClass:JobDetail傳入任務的類類型,它也是必須項。
jobDataMap:它用來傳參的作用。
使用場景:例如,輸出日志,輸出執行的任務所在路徑就可以通過getClass()。
查看全部 -
舉例:任務每隔兩秒鐘打印一次Hello World。
首先,需要到maven中央倉庫復制坐標到pom文件中,如圖。
——總結——
JobDetail:
通過它可以獲取Job執行時的一些信息。JobDetail它是通過Builder設計模式創建的。
Trigger:
通過它可以觸發Job何時執行。它也是通過Builder設計模式創建的。立即執行是通過startNow方法。時間間隔通過withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2)。重復執行repeatForever()。
Scheduler:它是通過Factory設計模式創建的。
查看全部 -
Quartz簡介:OpenSymphony提供的強大的開源任務調度框架(官網:http://www.quartz-scheduler.org/),它是基于Java實現的。
Quartz特點:
1、強大的調度任務框架,Spring默認的調度框架,容易與Spring集成,實現靈活、可配置的調度功能。
2、提供了調度運行環境的持久化機制,可以保存并恢復調度現場,即使系統因故障關閉,任務調度現場數據并不會丟失(Timer就不能做到這一點,一旦失敗,接下來的任務就都不能執行了,并且一切的執行信息都會丟失)。
3、允許靈活的定義調用觸發器的時間表,并可以對觸發器和任務進行關聯映射,它提供了主鍵式的監聽器和各種插件,線程池的功能,支持任務和調度的多種組合方式,支持調度數據的多種存儲方式。
4、分布式和存儲能力。
Quartz用到的設計模式:
1、Builder模式:例如Job、Trigger,它們都是通過Builder創建的。
2、Factory模式:例如調度器是通過它創建的。
3、組建模式:可以讓每一個組件可以插拔,并且組件之間的耦合度是很低的,易于擴展,可以自行定義一些組件。
4、鏈式寫法
Quartz的核心概念:
1、調度器:定期定時定頻率的調度執行任務。
2、任務:業務邏輯。
3、觸發器:讓行為生效的時間。
Quartz的體系結構:
1、JobDetail:任務的實現細節。
2、Trigger:觸發器,決定任務什么時候被調用,它又分為SimpleTrigger、CronTrigger,SimpleTrigger它類似于Timer,實現時間上的一些操作。CronTrigger實現較為復雜的業務邏輯,例如每周三執行任務。
3、scheduler:調度器,定時定頻率調用定時任務JobDetail,并且通過它將JobDetail和Trigger綁定在一起。
Quartz的重要組成:
1、Job:區別于JobDetail,它是一個接口,并且只有一個方法,可以通過實現該接口,實現定時任務,它就相當于TimerTask的run方法,只不過是該方法有一個參數。
查看全部 -
Scheduler
查看全部 -
Cron表達式及案例<br/><p><img src="http://img1.sycdn.imooc.com//5ded090f0001429105000280.jpg" alt="http://img1.sycdn.imooc.com//5ded090f0001429111900666.jpg"/></p><p><img src="http://img1.sycdn.imooc.com//5ded090f0001a42105000284.jpg" alt="http://img1.sycdn.imooc.com//5ded090f0001a42111930676.jpg"/></p>查看全部
-
通配符說明<br/><p ><img src="http://img1.sycdn.imooc.com//5ded08670001e71305000243.jpg" alt="http://img1.sycdn.imooc.com//5ded08670001e71312510607.jpg"/></p>查看全部
-
Job的定義:實現業務邏輯的任務接口。
淺談Job:Job接口非常容易實現,只有一個execute方法,類似TimerTask的run方法,在里面編寫業務邏輯。
?package org.quartz;
public interface? Job{
????public void execute(JobExecutionContext context)throws?????
?????JobExecutionException;
}
Job實例在Quartz中的生命周期
????每次調度器執行job時,它在調用execute方法錢會創建一個新的job實例。
????當調用完成后,關聯的job對象實例會被釋放,釋放的實例會被垃圾回收機制回收。
淺談JobDetail
????JobDetail為Job實例提供了許多設置屬性,以及JobDataMap成員變量屬性,它用來存儲特定Job實例的狀態信息,調度器需要借助JobDetail對象來添加Job實例。
查看全部 -
Quartz體系機構:
查看全部 -
鏈式寫法查看全部
-
定時任務工具所需
調度器scheduler? 老板
觸發器trigger? ? 下班
任務jobDetail? ? 發工資
總結:下班老板發工資
查看全部 -
特點:強大的調度功能,靈活的應用方式 ,分布式和集群能力
查看全部
舉報