ASP.NET Core基础之定时任务(二)-Quartz.NET入门

阅读本文你的收获

  1. 了解任务调度框架QuartZ.NET的核心构成
  2. 学会在ASP.NET Core 中使用QuartZ.NET

在项目的开发过程中,难免会遇见需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,上次分享了ASP.NET Core中实现定时任务的第一种方式 托管服务+Timer,这种方式适用于比较简单的定时任务场景,对于更复杂的场景,我们可以使用HangFire和QuartZ.NET等成熟的任务调度框架。
这次我们对QuartZ.NET任务调度框架做一个入门。

一、什么是QuartZ.NET?

Quartz.Net 是一个.NET程序集,是非常流行的 Java 作业调度系统 Quartz 的 C#实现。

Quartz.Net 是一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。
功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持 Cron 表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承 IJob 接口即可。

对于小型应用,Quartz.Net 可以集成到你的系统中,对于企业级系统,它提供了 Routing 支持,提供了 Group 来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。

二、QuartZ.NET中的核心对象

  1. Scheduler - 调度器。与调度程序交互的主要API。
  2. IJob - 作业。你想要调度器执行的任务组件需要实现该接口 。
  3. JobDetail -用于定义作业详细信息。
  4. Trigger - 触发器。定义执行给定作业的计划的组件。
  5. JobBuilder - 用于定义/构建JobDetail 实例,用于定义作业的实例。
  6. TriggerBuilder - 用于定义/构建触发器实例。

Scheduler 的生命期,从 SchedulerFactory 创建它时开始,到 Scheduler 调用shutdown() 方法时结束;

Scheduler 被创建后,可以增加、删除和列举 Job 和 Trigger,以及执行其它与调度相关的操作(如暂停 Trigger)。

但是,Scheduler 只有在调用 start() 方法后,才会真正地触发 trigger(即执行 job)

三、入门案例

开发环境

平台版本是:.NET6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022

  1. 安装QuartZ.NET的Nuget包
    下载QuartZ

  2. 编写一个定时作业,必须实现IJob接口

    using Quartz; //引用QuartZ命名空间
    
    //新建一个IJob的实现类
    public class FirstJob : IJob
    {
        /// <summary>
        /// 执行具体任务
        /// </summary>
        /// <param name="context">作业执行上下文</param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Factory.StartNew(() => {
                       System.Console.WriteLine("我的第一个定时任务");
                       //实际项目中 一般执行一些定时任务,如:统计数据、定时发送信息、定时同步数据等
                   });
        }
    }
    
  3. 启动定时任务,以下例子为 在WebApi控制器中启动定时任务

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [HttpGet("TestQuartZ")]
        public async Task<IActionResult> TestQuartZ()
        {
            //1. 创建一个调度器
            var scheduler = await new StdSchedulerFactory().GetScheduler();
            await scheduler.Start(); //启动
            //2. 创建一个作业,
            var job = JobBuilder.Create<FirstJob>().Build();
            //3. 创建一个简单触发器
            //var trigger = TriggerBuilder.Create()
            //  .WithSimpleSchedule(x =>{
            //     x.WithRepeatCount(3)       //循环次数
            //      .WithIntervalInSeconds(1);//间隔时间
            //}).Build();
            //3. 创建Cron触发器(Cron触发器比简单触发器更加强大)
            var trigger = TriggerBuilder.Create()
                .WithCronSchedule("* * * * * ? *")
                .Build();
            //将三个对象,连接在一起
            await scheduler.ScheduleJob(job, trigger);
            return Ok();
        }
    }
    

以上例子中演示了两种触发器的使用方式。
对于Simple触发器,设置规则比较简单,可以设置循环执行次数,间隔时间等。仅满足基本使用,对于想要实现更复杂的时间规则设置,如某年某月某日定时定点执行则需要用到Cron触发器,可以指定Cron表达式。在线生成CRON表达式

  1. 可以在Swagger中,调用/api/values/TestQuartZ接口来 启动以上定时任务。一旦定时任务启动,可以看到FirstJob类中的Execute方法每秒都会被执行一次。

结语

本文对于QuartZ.NET做了一个入门级的案例。更多高级用法将在后续分享。如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vitepress项目使用github的action自动部署到github-pages中,理论上可以通用所有

使用github的action自动部署到github-pages中 创建部署的deploy.yml文件&#xff0c;在项目的根目录下面 .github\workflows\deploy.yml 完整的代码&#xff1a;使用的是pnpm进行依赖安装。 name: 部署VitePresson:push:branches:- docs # 这段是在推送到 docs 分支时触发该…

EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)

EfficientDet: Scalable and Efficient Object Detection EfficientDet&#xff1a;可扩展和高效的目标检测 摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了用于目标检测的神经网络架构设计选择&#xff0c;并提出了几个关键的优化方法来提高效率。首先&…

[node]Node.js 中REPL简单介绍

[node]Node.js 中REPL简单介绍 什么是REPL为什么使用REPL如何使用REPL 命令REPL模式node的全局内容展示node全局所有模块查看全局模块具体内容其它命令 实践 什么是REPL Node.js REPL(Read Eval Print Loop:交互式解释器) 表示电脑的环境&#xff0c;类似 Windows 系统的终端或…

【大数据存储与处理】第一次作业

hbase 启动步骤 1、启动 hadoop&#xff0c;master 虚拟机&#xff0c;切换 root 用户&#xff0c;输入终端命令&#xff1a;start-all.sh 2、启动 zookeeper&#xff0c;分别在 master、slave1、slave2 虚拟机终端命令执行&#xff1a;zkServer.sh start 3、启动 hbase&#x…

ToB还是ToC?工业级与消费级AR眼镜都能干什么?

来源&#xff1a;虹科数字化与AR 虹科分享 | ToB还是ToC&#xff1f;工业级与消费级AR眼镜都能干什么&#xff1f; 原文链接&#xff1a;https://mp.weixin.qq.com/s/lyTASoKm29woIbfcKBtMvQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 随着科技的飞速发展&#…

vue element plus 管理系统路由菜单简要设计(后端获取菜单)

1 需求 管理系统“菜单”由后端接口返回&#xff0c;前端需要根据后端返回的“菜单”数组&#xff0c;构造路由&#xff0c;渲染侧栏菜单有些菜单是子菜单&#xff0c;有对应的路由&#xff0c;但是不在侧栏显示&#xff08;比如一些详情页面&#xff09; 注&#xff1a;这里的…

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

四、Spring IoC实践和应用(基于注解方式管理 Bean)

本章概要 基于注解方式管理 Bean 实验一&#xff1a; Bean注解标记和扫描 (IoC)实验二&#xff1a; 组件&#xff08;Bean&#xff09;作用域和周期方法注解实验三&#xff1a; Bean属性赋值&#xff1a;引用类型自动装配 (DI)实验四&#xff1a; Bean属性赋值&#xff1a;基本…

如何用docke启动redis?(解决双击docker服务闪退问题)

要使用Docker启动Redis服务&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Docker&#xff1a; 如果您还没有安装Docker&#xff0c;请先在您的系统上安装Docker。您可以从Docker官方网站获取安装说明。 https://www.docker.com/get-started/ 2.在Docker Hub上查找R…

论文中公式怎么降重 papergpt

大家好&#xff0c;今天来聊聊论文中公式怎么降重&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文中公式怎么降重 一、引言 在论文撰写过程中&#xff0c;公式是表达学…

声音克隆:让你的声音变得无所不能

什么是声音克隆&#xff1f; 声音克隆是一种利用人工智能技术&#xff0c;根据一段声音样本&#xff0c;生成与之相似或完全相同的声音的过程。声音克隆可以用于多种场景。 声音克隆的原理是利用深度学习模型&#xff0c;从声音样本中提取声音特征&#xff0c;然后根据目标文…

华为OD机试 - 发广播 - 并查集(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、并查集Java 实现并查集 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&…

机器学习算法(12) — 集成技术(Boosting — Xgboost 分类)

一、说明 时间这是集成技术下的第 4 篇文章&#xff0c;如果您想了解有关集成技术的更多信息&#xff0c;您可以参考我的第 1 篇集成技术文章。 机器学习算法&#xff08;9&#xff09; - 集成技术&#xff08;装袋 - 随机森林分类器和...... 在这篇文章中&#xff0c;我将解释…

​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化

2022年亚马逊云科技re:Invent盛会于近日在拉斯维加斯成功召开&#xff0c;吸引了众多业界精英和创新者。亚马逊云科技边缘服务副总裁Jan Hofmeyr在演讲中分享了关于亚马逊云科技海外服务器边缘计算的最新发展和创新成果&#xff0c;引发与会者热烈关注。 re:Invent的核心主题是…

057:vue组件方法中加载匿名函数

第057个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

激光打标机:快速、精确、耐用的标记解决方案

随着科技的不断进步&#xff0c;激光打标机已经成为现代工业生产中不可或缺的一部分。作为一种高效、精确、耐用的标记解决方案&#xff0c;激光打标机在各个领域都发挥着重要的作用。 一、快速、精确的标记技术 激光打标机采用激光束作为标记工具&#xff0c;通过精确控制激光…

华为鸿蒙操作系统简介及系统架构分析(2)

接前一篇文章&#xff1a;华为鸿蒙操作系统简介及系统架构分析&#xff08;1&#xff09; 本文部分内容参考&#xff1a; 鸿蒙系统学习笔记(一) 鸿蒙系统介绍 特此致谢&#xff01; 上一回对于华为的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;进行了介绍并说明了其层次化…

医保购药小程序:智能合约引领医疗数字革新

在医疗领域&#xff0c;医保购药小程序通过引入智能合约技术&#xff0c;为用户提供更为高效、安全的购药体验。本文将通过简单的智能合约代码示例&#xff0c;深入探讨医保购药小程序如何利用区块链技术中的智能合约&#xff0c;实现医保结算、购药监控等功能&#xff0c;为医…

Linux 宿主机搭建jenkins

目录 前言错误信息 前言 最近项目需要使用jenkins进行CICD&#xff0c;搭建后始终找不到git 错误信息 Source Code Management None出现这种情况主要是插件没有了&#xff0c;需要我们安装插件&#xff1a;

深入理解网络 I/O:mmap、sendfile、Direct I/O

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…