Quertz一些使用方法、資料和心得

先說一下近況吧;最近在寫定時器相關的東西,本身公司有一套定時器的東西,是通過Timer去喚起ScheduleScheduledTreadPoolExector的定時器線程池去實現定時調度的,此方法的好處就是在後臺任務中處理的表現較優點,想象一下如每天下載訂單信息,定時上傳數據信息等等操作,定時任務不是很複雜的東西很容易實現,其二的優點就是已經被集成到公司的框架中,實現起來較爲方便

此次由於定時器任務有延遲任務,公司的類庫框架已經不能夠滿足了,調研了一下,發現Quertz可以實現,並且之前自己也實現過小DEMO,所以這次就選擇這個框架進行業務處理;

以下是一些總結、文末帶上一些參考資料

Quertz基礎知識:,個人覺得這篇文檔總結的最好,可以先看看這個文檔,對下面的閱讀有幫助

1 Quertz 持久化和非持久化

持久化

  • 1: 使用Quertz自己的表
    Quertz默認是支持持久化操作的,這個在官方文檔已經提供了具體的表結構;這裏不在描述,其他博客都有講,表結構下載地址:下載完資料,裏面有建表的SQL 文章介紹地址:Spring框架下持久化操作,創建完之後,需要自己重寫quertz的配置文件quertz.properties文件,如下頁面;除了數據庫地址,可以參考以下配置
    在這裏插入圖片描述

  • 2: 使用自己公司的業務表
    很多公司都有自己的定時器,我司也有,所以我採取的是這種方式;在系統初始化的時候,將所有的需要裝載到Quertz定時器的數據從數據庫加載到Quertz內存中,實現定時調度;各大博客文檔中spring版本居多;感興趣的自己去搜索,Spring動態定時器

    如果不基於Spring的做法,其實也很簡單,就像我剛纔所說,在內存中提供一個全局的Schedule對象調用
    在這裏插入圖片描述
    有了這個對象之後,就可以使用這個對象生成不同的Job和trigger了;

非持久化:

  1. 1 Quertz默認的位置文件 quertz-perperties 默認使用的是 RAMJobStore,這個job類型就是非持久化的;
  2. 在這裏插入圖片描述
    一旦應用程序結束,定時器也就結束了;

2 定時器監聽器

這篇文章已經介紹的非常詳細了,有興趣的同學自己看看(個人建議還是非常有必要),可以利用quertz的監聽器起到數據的監聽作用,能夠同步更新數據的狀態;

3 trigger 相關的設置

首先看看我司設置的定時器
在這裏插入圖片描述
涉及到執行間隔頻率(按照天、周(指定天)、月(指定天數))、每天的執行頻率、已經調度器的執行區間、

循環執行部分都可以使用DailyTimeIntervalSchedulerBuilder類來實現,其中必要麻煩的是 間隔週和間隔月份

間隔週、間隔月的處理辦法

間隔週:DailyTimeIntervalSchedulerBuilder.dailytimeIntervalSchedule().onDaysOfWeek(/這裏這是需要執行的天數就可以/)

間隔月:使用monthlyCalendar,計算需要統計的日期(true表示排除、false表示包含天數)
在這裏插入圖片描述
在這裏插入圖片描述
最後修改當前trigger的日期就可以:trigger.modifedCalendar(info.getPlanId); 即可

參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章