一、需求場景
我們在日常開發中,總會遇到這樣的需求:
- 每隔一段時間,執行一次某個任務。
- 固定某個時間執行任務,例如凌晨12點對當天的數據進行統計。
- 每個月的第幾天,執行某個任務。
諸如此類的需求很多,我們總不能人工去干這件事吧 ?所以我們需要引入作業調度工具,也就是今天的主角——Quartz。
二、Quartz基本介紹
2.1Quartz概述
Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基於 Java 實現。該項目於 2009 年被 Terracotta 收購,目前是 Terracotta 旗下的一個項目。讀者可以到 http://www.quartz-scheduler.org/站點下載 Quartz 的發布版本及其源代碼。
2.2Quartz的特點
作為一個優秀的開源調度框架,Quartz 具有以下特點:
- 強大的調度功能,例如支持豐富多樣的調度方法,可以滿足各種常規及特殊需求;
- 靈活的應用方式,例如支持任務和調度的多種組合方式,支持調度數據的多種存儲方式;
- 分布式和集群能力,Terracotta 收購后在原來功能基礎上作了進一步提升。
三、使用Quartz
此次我將建立一個.net Core 3.1 MVC項目進行演示
1、NuGet引入Quartz,目前為止Quartz的最新版本為3.0.7。
2、注冊ISchedulerFactory的實例。
切換至Startup類,在ConfigureServices方法中添加如下代碼
3、創建作業
我們添加一個Jobs的類,繼承Ijob接口
Jobs類中的Execute方法,多線程的向我們的D盤中的message.log文本文件中寫入當前時間。
3.代碼演示。
切換到HomeController ,正式開始擼代碼。
4、運行結果
可以看到程序每隔10秒就會向message文件寫入一行當前時間。
四、更多時間策略
文章開篇我們就列舉了幾種常見的業務需求,上面的案例中,我們演示了10秒鍾執行一次的效果。如果需要以分鍾、小時、天等作為單位,甚至是更為復雜的時間策略,如何定制呢?