Web開發:使用Quartz庫結合WebAPI根據任務列表定時執行相應邏輯

一、實體及文件結構

public class JobSchedule
{public string Id { get; set; }public string Title { get; set; }public string Cron { get; set; }
}

二、服務類

后臺服務類初始化時會調用此類的StartAsync方法

public class QuartzService : IQuartzService
{private readonly IScheduler _scheduler;public QuartzService(IJobFactory jobFactory) // 接收 IJobFactory{var schedulerFactory = new StdSchedulerFactory();_scheduler = schedulerFactory.GetScheduler().Result;// 設置自定義 JobFactory_scheduler.JobFactory = jobFactory;}public async Task StartAsync(){await _scheduler.Start();//模擬通過查庫獲得任務列表(實際可以通過注入IFreeSql等方式獲取)List<JobSchedule> list = new List<JobSchedule>{new JobSchedule{Id = Guid.NewGuid().ToString(),Title = "每間隔3s打印一次時間",Cron = "0/3 * * * * ?"},new JobSchedule{Id = Guid.NewGuid().ToString(),Title = "每間隔15s打印一次時間",Cron = "0/15 * * * * ?"}};foreach (var jobSchedule in list){var job = JobBuilder.Create<PrintTimeJob>() // 使用泛型方式//.Create(Type.GetType("WebApplication1.Controllers.Quartz.PrintTimeJob")) //使用命名空間+類名方式.WithIdentity(jobSchedule.Id).UsingJobData("title", jobSchedule.Title)//傳遞參數到邏輯方法PrintTimeJob中.Build();var trigger = TriggerBuilder.Create().WithIdentity($"{jobSchedule.Id}.trigger").WithCronSchedule(jobSchedule.Cron).StartNow().Build();await _scheduler.ScheduleJob(job, trigger);}}public async Task StopAsync(){await _scheduler.Shutdown();}
}

三、后臺服務類

初始化的關鍵在配置(Startup.cs)中

public class QuartzHostedService : IHostedService
{private readonly IQuartzService _quartzService;public QuartzHostedService(IQuartzService quartzService){_quartzService = quartzService;}public async Task StartAsync(CancellationToken cancellationToken){await _quartzService.StartAsync();}public async Task StopAsync(CancellationToken cancellationToken){await _quartzService.StopAsync();}
}

四、任務邏輯方法

實現IJob,會根據Cron表達式定時執行該方法(服務類已注冊)

下面的注入IFreesql只是一個示例,表達的意思是可以查庫

/// <summary>
/// 邏輯方法
/// </summary>
public class PrintTimeJob : IJob
{private readonly IFreeSql _freeSql;public PrintTimeJob(IFreeSql freeSql){_freeSql = freeSql;}public async Task Execute(IJobExecutionContext context){var q = await _freeSql.Ado.QueryAsync<string>("select id from city");var title = context.JobDetail.JobDataMap.GetString("title");Console.WriteLine($"{title}: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");await Task.CompletedTask;}
}


五、Startup.cs配置

public void ConfigureServices(IServiceCollection services)
{//省略其他不相關代碼// 注冊Quartz相關服務services.AddQuartz();//Quartz框架添加到依賴注入容器services.AddSingleton<IQuartzService, QuartzService>();//自己編寫的服務類services.AddHostedService<QuartzHostedService>();//自己編寫的后臺服務類,初始化時會調用上面這個服務類
}

六、效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95254.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構棧的應用

1.棧的應用 后入先出的有序列表//無法進行小數、負數計算&#xff0c;除法計算為在除法步驟時舍棄小數部分public static void main(String[] args) {//雙棧實現計算器功能,思路//1.定義數棧1、符號棧2、掃描指針index&#xff0c;從前往后掃描表達式序列//2.遇到數字&#xff…

npm 打包上傳命令,撤銷錯誤版本

添加npm用戶賬號npm adduser上傳包命令npm publish撤銷錯誤版本example&#xff1a;npm unpublish longze-guide0.1.0 --forcepackage.json example{"name": "longze-guide","version": "0.1.1","private": false,"des…

Python爬蟲實戰:研究Pyplot模塊,構建IMDb數據采集和分析系統

1. 引言 1.1 研究背景 在大數據時代,互聯網蘊含著海量有價值的信息,如何高效獲取并分析這些信息成為各行各業的重要需求。網絡爬蟲作為一種自動化數據采集工具,能夠按照預定規則從網頁中提取所需信息,為數據分析提供基礎數據支撐。而數據可視化則是將抽象數據轉化為直觀圖…

算術邏輯運算指令 (匯編)

乘除運算指令MUL指令實現兩個無符號操作數的乘法運算。乘數是OPRD&#xff0c;被乘數位于AL、AX或EAX中&#xff08;由OPRD的尺寸決定&#xff0c;乘數和被乘數的尺寸一致&#xff09;。乘積尺寸翻倍&#xff1a;16位乘積送到AX&#xff1b;32位乘積送DX:AX&#xff1b;64位乘積…

Agentless:革命性的無代理軟件工程方案

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 01. 什么是Agentless&#xff1f; Agentless是由伊利諾伊大學香檳分校…

CVE Push Service | 高危漏洞實時情報自動化推送工具

工具介紹 &#x1f525; CVE Push Service | 自動化高危漏洞情報推送 ? 面向網絡安全從業者的 高危漏洞實時情報推送工具 自動拉取 NVD 最新漏洞數據&#xff0c;篩選 CVSS ≥ 7.0 的高危漏洞&#xff0c;并通過 Server醬3 第一時間推送到您的設備&#xff0c;幫助您在應急響…

SpringBoot的基礎介紹,用法和配置

為什么會推出一款全新的SpringBoot&#xff1f;雖然Spring已經取得了非常大的成功&#xff0c;他的優點非常的多&#xff0c;將創建方法的權利給了Spring架構使我們程序員寫代碼更加的便利。但是Spring也有很多的缺點&#xff1a;配置麻煩&#xff0c;而且很多都是模板化的配置…

深度學習】--卷積神經網絡

?????? 卷積神經網絡 卷積神經網絡&#xff08;Convolutional Neural Network&#xff0c;簡稱CNN&#xff09;是一種深度學習模型&#xff0c;特別適用于處理具有網格結構的數據。主要目的是自動地、層次化地從原始數據中學習有效的特征表示&#xff0c;以完成特定的任…

RK3588部署YOLOv8姿態估計

1. YOLOv8姿態估計與部署 姿態估計(Pose estimation)是一項涉及識別圖像中關鍵點位置的任務。 關鍵點可以表示對象的各個部分&#xff0c;如關節、地標或其他獨特特征,關鍵點的位置通常表示為一組2D[x, y]或3D[x, y, visible]坐標。 YOLOv8-Pose人體姿態估計,會先檢測出圖像中…

信創之-麒麟v10服務器安裝tengine(已完成)

之前的文章太長了&#xff0c;所以單獨寫背景&#xff1a;java8springbootnginxredissqlserverwindows server2000目前java8已經更換&#xff0c;windows也已經更換&#xff0c;sqlserver也已經更換成dm8其實java的靜態文件目錄&#xff0c;可以很好處理前端網站了&#xff0c;…

Redis進階(上)

Redis系統架構中各個處理模塊是干什么的&#xff1f; Redis 系統架構 本課時&#xff0c;我將進一步分析 Redis 的系統架構&#xff0c;重點講解 Redis 系統架構的事件處理機制、數據管理、功能擴展、系統擴展等內容。 事件處理機制 Redis 組件的系統架構如圖所示&#xff0c;主…

【K8s】整體認識K8s之監控與升級/ETCD的備份和恢復/kustomization/CRD

metrics-server 先說一下metrics-server&#xff0c;這是一個聚合器&#xff0c;專門用來顯示集群的資源使用情況&#xff0c;主要是內存和cpu。 安裝 metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.0/comp…

【數據分享】多份土地利用矢量shp數據分享-澳門

而今天要說明數據就是多份土地利用矢量shp數據分享-澳門。數據介紹▲ 土地利用數據&#xff08;2025年&#xff09;▲土地利用數據&#xff08;2018年&#xff09;▲ 30m土地利用數據&#xff08;2023年&#xff09;▲ 公路鐵路道路河流水系數據概況其他概況注&#xff1a;本文…

增強現實—Gated-attention architectures for task-oriented language grounding

&#x1f31f;&#x1f31f; 歡迎來到我的技術小筑&#xff0c;一個專為技術探索者打造的交流空間。在這里&#xff0c;我們不僅分享代碼的智慧&#xff0c;還探討技術的深度與廣度。無論您是資深開發者還是技術新手&#xff0c;這里都有一片屬于您的天空。讓我們在知識的海洋中…

CC攻擊的技術分析與防御策略

CC攻擊&#xff08;Challenge Collapsar Attack&#xff09;是一種針對Web應用的拒絕服務攻擊方式&#xff0c;其主要通過模擬正常用戶行為來消耗服務器資源。為了更好地理解這種攻擊&#xff0c;讓我們詳細分析其技術原理及防御策略。CC攻擊的技術原理CC攻擊主要是通過發送大量…

【圖論】分層圖

一、分層圖的核心思想 分層圖是一種將圖的不同狀態拆分為多個“層”的建模方法&#xff0c;每層對應一種特定狀態。通過這種方式&#xff0c;可以將復雜的狀態轉移問題轉化為多層圖中的最短路徑問題。 核心特點&#xff1a; 層內邊&#xff1a;表示普通操作&#xff08;如正常行…

當穩定幣開始生息:USDT0 與 Berachain 的二次進化故事

如果說過去幾年&#xff0c;穩定幣是 DeFi 世界里最安穩的一塊基石&#xff0c;那么 2025 年的 Berachain 正在把它們重新塑造成一種新的資產類型。在這條新興的公鏈上&#xff0c;穩定幣不再只是 “資金的搬運工”&#xff0c;而是搖身一變&#xff0c;成為能生息、能博弈、能…

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析 消息隊列作為分布式系統中常見的異步解耦組件&#xff0c;在高并發場景下對可用性和性能提出了極高的要求。本文基于生產環境需求&#xff0c;深入分析 Kafka、RabbitMQ 與 RocketMQ 三大主流消息中間件在高…

深入理解 HTTP 與 HTTPS:區別以及 HTTPS 加密原理

目錄 一、HTTP 與 HTTPS 的基本概念 二、HTTP 與 HTTPS 的核心區別 三、為什么需要 HTTPS&#xff1f; 四、HTTPS 的加密通信原理&#xff08;核心&#xff09; 1. 客戶端發起 HTTPS 請求 2. 服務端返回 SSL/TLS 證書 3. 客戶端驗證證書 4. 客戶端生成對稱密鑰并用公鑰…

零售行業的 AI 革命:從用戶畫像到智能供應鏈,如何讓 “精準營銷” 不再是口號?

AI 浪潮下的零售變革?在科技飛速發展的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的態勢席卷全球&#xff0c;深刻地改變著各行各業的運營模式和發展軌跡&#xff0c;零售行業自然也難以置身事外。AI 技術憑借其強大的數據處理能力、精準的分析預測能力…