【Spring學習】Quartz任務調度和異步執行

任務調度和異步執行

目錄

一、任務調度概述

二、任務調度Quartz

2.1 Quartz基礎結構

【1】Job接口

【2】JobDetail類

【3】Trigger類

【4】Calendar

【5】Scheduler

【6】ThreadPool

2.2 使用SimpleTrigger

2.3 使用CronTrigger

2.4 使用Calendar

2.5 任務調度信息存儲

1. 通過配置文件調整保存策略

2.查詢數據庫中的運行信息

三、在Spring中使用Quartz

3.1 創建JobDetail

3.2 創建Trigger

3.3 創建Scheduler


一、任務調度概述

1. 應用常見的任務調度,比如以時間爲關注點的調度

  • 隔半小時生成精華文章
  • 凌晨統計用戶排名
  • 每30分鐘針對鎖定到期的用戶進行解鎖
  • 每月1日凌晨統計上個月的數據,生成報表
  • 每半小時查詢用戶是否有快到期的處理業務等

以及以資源爲關注點的調度,比如:web server處理線程請求時,使用線程池共享服務的線程資源。

2. 任務調度本身涉及多線程併發、運行時間規則制定及解析、運行現場保持與恢復、線程池維度等多方面的工作。

 

二、任務調度Quartz

 

2.1 Quartz基礎結構

 

主要有調度器、任務和觸發器三個概念。

 

【1】Job接口

    • 是一個接口,通過實現該接口來定義執行任務
    • 只有一個方法void execute(JobExecutionContext context)
    • Job運行時信息保存在JobDataMap實例中
    • 有一個StatefulJob子接口,表示有狀態的任務,不能併發執行。無狀態的可併發

【2】JobDetail類

    • 用來描述Job實現類機器靜態信息,如名稱、描述、關聯監聽器等
    • 執行Job時,接收Job實現類,然後通過反射機制的newInstance來實例化job
    • 構造函數:JobDetail(String name, String group, jobClass),name和group指在scheduler中的組名和名稱

【3】Trigger類

    • 是一個類,描述job的時間觸發規則,有兩個子類:
    • SimpleTrigger:只觸發一次或者固定間隔週期觸發時使用
    • CronTrigger:可通過cron表達式來進行復雜調度

【4】Calendar

    • 是日曆特定時間點的集合,如每年AnnualCalendar、每月MonthlyCalendar、每週WeeklyCalendar等
    • 一個Trigger可以跟多個Calendar關聯
    • 舉個栗子,如安排週一早晨9點執行任務,但遇到法定節假日則不執行,這時需要使用Calendar進行定點排除

【5】Scheduler

    • 代表一個Quartz的獨立運行容器
    • Trigger和JobDetail可以註冊到Scheduler中,擁有各自的組和名稱
    • Scheduler可將Trigger綁定到JobDetail中,這樣Trigger被觸發時,job會執行
    • job和Trigger是1對多的瓜系,Scheduler和前兩者是1對多的瓜系
    • 可通過SchedulerFactory來創建Scheduler,有個SchedulerContext,通過Map保存上下文數據

【6】ThreadPool

    • Scheduler使用線程池作爲任務運行的基礎設施

Quartz有完善的事件和監聽體系。包括:

  • 任務執行前/後事件
  • 觸發器觸發前/後事件
  • 調度器開始/關閉事件等

 

2.2 使用SimpleTrigger

2.3 使用CronTrigger

2.4 使用Calendar

 

2.5 任務調度信息存儲

1. 通過配置文件調整保存策略

Quartz的屬性配置文件包括三方面:

  • 集羣信息
  • 調度器線程池
  • 任務調度線程數據的保存

2.查詢數據庫中的運行信息

 

三、在Spring中使用Quartz

3.1 創建JobDetail

3.2 創建Trigger

3.3 創建Scheduler

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