Spring Cloud 2.x系列之springboot整合quartz
在做專案時有時候會有定時器任務的功能,比如某某時間應該做什麼,多少秒應該怎麼樣之類的。定時任務常用的業務場景是進行資料統計。spring支援多種定時任務的實現,今天介紹一下spring定時器和quartz定時器的使用。
一、spring定時器
spring自帶支援定時器的任務實現。其可通過簡單配置來實現定時任務。主要用到如下兩註解:
@EnableScheduling:標註啟動定時任務
@Scheduled:定義某個定時任務
常用說明:
@Scheduled(fixedRate=2000):上一次開始執行時間點後2秒再次執行
@Scheduled(fixedDelay=2000):上一次執行完畢時間點後2秒再次執行
@Scheduled(initialDelay=1000,fixedDelay=2000):第一次延遲1秒執行,然後在上一次執行完畢時間點後2秒再次執行
@Scheduled(cron="** * * * ?"):按cron規則執行
二、quartz定時任務
quzrtz主要理解如下幾個概念:
Job:是一個介面,只有一個方法void execute(JobExecutionContext context),開發者實現該介面定義執行任務,JobExecutionContext類提供了排程上下文的各種資訊。Job執行時的資訊儲存在JobDataMap例項中。
JobDetail:Quartz在每次執行Job時,都重新建立一個Job例項,所以它不直接接受一個Job的例項,相反它接收一個Job實現類,以便執行時通過newInstance()的反射機制例項化Job。因此需要通過一個類來描述Job的實現類及其它相關的靜態資訊,如Job名字、描述、關聯監聽器等資訊,JobDetail承擔了這一角色。
Trigger:是一個類,描述觸發Job執行的時間觸發規則。主要有SimpleTrigger和CronTrigger這兩個子類。當僅需觸發一次或者以固定時間間隔週期執行,SimpleTrigger是最適合的選擇;而CronTrigger則可以通過Cron表示式定義出各種複雜時間規則的排程方案:如每凌晨1:00執行,週一、週三、週五下午5:00執行等;
Calendar:org.quartz.Calendar和java.util.Calendar不同,它是一些日曆特定時間點的集合(可以簡單地將org.quartz.Calendar看作java.util.Calendar的集合——java.util.Calendar代表一個日曆時間點,無特殊說明後面的Calendar即指org.quartz.Calendar)。一個Trigger可以和多個Calendar關聯,以便排除或包含某些時間點。假設,我們安排每週星期一早上10:00執行任務,但是如果碰到法定的節日,任務則不執行,這時就需要在Trigger觸發機制的基礎上使用Calendar進行定點排除。
Scheduler:代表一個Quartz的獨立執行容器,Trigger和JobDetail可以註冊到Scheduler中,兩者在Scheduler中擁有各自的組及名稱,組及名稱是Scheduler查詢定位容器中某一物件的依據,Trigger的組及名稱必須唯一,JobDetail的組和名稱也必須唯一(但可以和Trigger的組和名稱相同,因為它們是不同型別的)。Scheduler定義了多個介面方法,允許外部通過組及名稱訪問和控制容器中Trigger和JobDetail。
1、新建專案,對應的pom.xml檔案如下
2、新建sprinboot啟動類ScheduledApplication.java
3、Spring定時任務類
4、Quartz定時任務類
單任務模式:
任務模式參考原始碼
5、對應的類結構說明
6、啟動ScheduledApplication類,並驗證定時任務是否啟動
(1) 註釋QuartzScheduled類的Configuration註解
啟動ScheduledApplication類檢視日誌:
(2) 放開QuartzScheduled類的Configuration註解,然後註釋QuartzScheduled類的Configuration註解
啟動ScheduledApplication類檢視日誌:
原始碼:
本文作者:java樂園
本文來自雲棲社群合作伙伴“ ofollow,noindex">JAVA樂園 ”,瞭解相關資訊可以關注“ JAVA樂園 ”