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

.Net/.NetCore開發愛好者交流羣:1092236120

一、需求場景

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

  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秒鐘執行一次的效果。如果需要以分鐘、小時、天等作爲單位,甚至是更爲複雜的時間策略,如何定製呢?

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

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