定時調度框架系列之Quartz.Net詳解

来源:https://www.cnblogs.com/daniu2022/archive/2022/09/30/16743761.html
-Advertisement-
Play Games

一. 背景 我們在日常開發中,可能你會遇到這樣的需求:"每個月的3號給用戶發信息,提醒用戶XXX "、"每天的0點需要統計前一天的考勤記錄"、"每個月的1號計算上個月的庫存情況"、"定時初始化數據供其它業務使用"、"每隔2分鐘輪詢查資料庫看某業務是否被審核通過,並提示用戶" 等等。 以上需求在開發中 ...


一. 背景

  我們在日常開發中,可能你會遇到這樣的需求:"每個月的3號給用戶發信息,提醒用戶XXX "、"每天的0點需要統計前一天的考勤記錄"、"每個月的1號計算上個月的庫存情況"、"定時初始化數據供其它業務使用"、"每隔2分鐘輪詢查資料庫看某業務是否被審核通過,並提示用戶" 等等。

  以上需求在開發中都非常常見,但它們僅僅屬於低端一點的需求,稍高端一點的需求比如:" 客服派車給調度,如果調度3天內沒有執行任何操作,需要提示調度要抓緊派車了 ",到這一步為止看起來和上面的需求並沒有什麼兩樣,但如果我要求,系統管理員可以動態配置提示時間呢?即管理員可以配置調度幾天沒有執行任何操作,系統需要給出提示。這麼一改的話,對於一些新手而已,難度就陡然上升了。

  下麵我們接著升級需求,系統中有A、B、C、D。。。。等等多個業務,系統管理員可以動態配置每個業務的執行時間情況(如:每隔2s執行一次、每月3號執行一次等等),並且可以動態的控制每個業務的開啟、關閉、暫停、全部關閉、全部暫停等。需求升級到這個程度,估計新手就抓蝦了,有一定經驗的人但是沒有接觸過類似框架,面對這樣的需求,也需要一點時間去研究。

解惑:

  需求1:也就是我們常說的定時任務,簡單一點的可以藉助Timer類來實現,對時間要求複雜的需要藉助第三方的框架來實現,如:Quartz.Net.

  需求2:需要我們動態配置定時任務的執行時間。

  需求3:需要我們自己搭建一個定時調度框架,然後來動態配置任務的開啟、關閉和觸發器的情況。

   需求三就是我們最終的目標,即我們要搭建一套通用的定時調度框架,可以手動增加定時任務,配置其觸發器,手動控制任務的開啟、關閉(B/S 架構);或者C/S架構,最終部署成windows服務的形式。

  綜上所述:Quartz.Net將是我們的最佳選擇。

 

二. Quartz.Net簡介

 1. Quartz.Net是一個強大、開源、輕量的作業調度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改寫,可用於winform和asp.net應用中。它靈活而不複雜。你能夠用它來為執行一個作業而創建簡單的或複雜的作業調度。

它有幾大優勢:

  a.持久化資料庫:SQLServer、MySQL、MongoDB、Redis

  b.集群支持:雙機熱備

  c.支持Web B/S架構和WinForm C/S架構

  d.trigger可以靈活的控制時間各類苛刻的時間要求

2. Quartz.Net框架的使用

①.引入方式:

  a. 通過NuGet引入搜索Quartz引入相應的程式集。

  (2.x版本需要引入三個程式集:Common.Logging、Common.Logging.Core、Quartz和一個xsd文件(用於xml配置進行代碼提示)

  b. 去官網下載源碼,通過引入源碼的形式進行使用(http://www.quartz-scheduler.net/)。

  PS:目前最新版本為3.0.5(2018-06-23),這裡採用的是2.6.1 即2x的最後一個版本,3x起支持.netcore,且基本用法發生一些變化,最好使用vs2017

②.基本使用:

  a.創建作業調度池(Scheduler)

  b.創建一個具體的作業即job (具體的job需要單獨在一個文件中執行)

  c.創建並配置一個觸發器即trigger 

  d.將job和trigger加入到作業調度池中

  e.開始調度 start

3. 官方地址

  官網:http://www.quartz-scheduler.net/

  示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

 轉載自- Yaopengfei - 博客園 (cnblogs.com)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 環境使用 Python 3.8 Pycharm 模塊使用 import requests —> 數據請求模塊 pip install requests import parsel —> 數據解析模塊 pip install parsel from selenium import webdriv ...
  • Java Hutool 包工具類推薦 ExcelUtil 包引入 hutool包版本號可根據實際情況更換 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.4.M1</ ...
  • 總結: ArrayList與Vector集合的底層都是通過Object[] elementData數組存放對象的 ArrayList使用無參構造器時,初始容量為0,當存放一個對象後,容量擴容為10,此後按1.5*當前容量進行擴容 ArrayList使用帶參構造器時,初始容量為設定值,當存放對象個數達 ...
  • 1.List集合概要 2.Iterable介面 1.概要 2.重要方法 forEach方法:對Collection集合中的每個對象進行消費 List<Student> list = Stream.generate(() -> new Student("張三", 23)).limit(100).col ...
  • Servlet4.0 Response對象Response對象封裝Server返回Client的所有信息。在HTTP協議中,Server傳達給Client信息轉換到HTTP Header或者HTTP BODY中。5.1 Buffering緩衝區Serverlet Container可以但不強制緩衝發 ...
  • 我們在創建條形碼時,如果以圖片的方式將創建好的條碼保存到指定文件夾路徑,可以在程式中直接載入圖片使用;已生成的條碼圖片,需要通過讀取圖片中的條碼信息,如條碼類型、條碼繪製區域在圖片中的四個頂點坐標位置等,可參考本文中的方法。 註:讀取時,也支持讀取二維碼類型。 引入dll 調用API:Spire.B ...
  • 前言 WPF 的 ComboBox 控制項等綁定 enum 值很繁瑣,很讓人頭疼,網上也有提供了一些方法,基本是使用 ObjectDataProvider 方式和 MarkupExtension 方式, 有沒有辦法綁定值為 enum 類型就自動載入所有枚舉值選項,下麵記錄一種方法; 實現方式 主要通過 ...
  • CORS跨域訪問問題往往出現在“瀏覽器客戶端”通過ajax調用“服務端API”的時候。而且若是深究原理,還會發現跨域問題其實還分為【簡單跨域】與【複雜跨域】這兩種情況。 網上對解決跨域限制有很多說明文章,但絕大多數要麼解決的不完善(比如,沒有區分【簡單跨域】與【複雜跨域】),要麼就是解決方案過於複雜 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...