.Net Core 使用 Quartz快速入門(一)


一、需求場景

我們在日常開發中,總會遇到這樣的需求:

  1. 每隔一段時間,執行一次某個任務。
  2. 固定某個時間執行任務,例如凌晨12點對當天的數據進行統計。
  3. 每個月的第幾天,執行某個任務。

諸如此類的需求很多,我們總不能人工去干這件事吧 ?所以我們需要引入作業調度工具,也就是今天的主角——Quartz

二、Quartz基本介紹

2.1Quartz概述

Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基於 Java 實現。該項目於 2009 年被 Terracotta 收購,目前是 Terracotta 旗下的一個項目。讀者可以到 http://www.quartz-scheduler.org/站點下載 Quartz 的發布版本及其源代碼。

2.2Quartz的特點

 作為一個優秀的開源調度框架,Quartz 具有以下特點:

  1. 強大的調度功能,例如支持豐富多樣的調度方法,可以滿足各種常規及特殊需求;
  2. 靈活的應用方式,例如支持任務和調度的多種組合方式,支持調度數據的多種存儲方式;
  3. 分布式和集群能力,Terracotta 收購后在原來功能基礎上作了進一步提升。

三、使用Quartz

此次我將建立一個.net Core 3.1 MVC項目進行演示

1、NuGet引入Quartz,目前為止Quartz的最新版本為3.0.7。

2、注冊ISchedulerFactory的實例。

切換至Startup類,在ConfigureServices方法中添加如下代碼

services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();

3、創建作業

 我們添加一個Jobs的類,繼承Ijob接口

Jobs類中的Execute方法,多線程的向我們的D盤中的message.log文本文件中寫入當前時間。

3.代碼演示。

切換到HomeController ,正式開始擼代碼。

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger; private readonly ISchedulerFactory _schedulerFactory; private IScheduler _scheduler; public HomeController(ILogger<HomeController> logger, ISchedulerFactory schedulerFactory) { _logger = logger; _schedulerFactory = schedulerFactory; } public async Task<IActionResult> Index() { //通過工場類獲得調度器 _scheduler = await _schedulerFactory.GetScheduler(); //開啟調度器 await _scheduler.Start(); //創建觸發器(也叫時間策略) var trigger = TriggerBuilder.Create() .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())//每10秒執行一次  .Build(); //創建作業實例 //Jobs即我們需要執行的作業 var jobDetail = JobBuilder.Create<Jobs>() .WithIdentity("Myjob", "group")//我們給這個作業取了個“Myjob”的名字,並取了個組名為“group”  .Build(); //將觸發器和作業任務綁定到調度器中 await _scheduler.ScheduleJob(jobDetail, trigger); return View(); } public IActionResult Privacy() { return View(); }

4、運行結果

可以看到程序每隔10秒就會向message文件寫入一行當前時間。

四、更多時間策略

文章開篇我們就列舉了幾種常見的業務需求,上面的案例中,我們演示了10秒鍾執行一次的效果。如果需要以分鍾、小時、天等作為單位,甚至是更為復雜的時間策略,如何定制呢?

未完,待續。。。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM