快速掌握Quartz.Net计划任务调度框架,轻松实现定时任务

ops/2024/12/13 13:04:49/

在这里插入图片描述

前言

Quartz.Net是一个开源的作业调度框架,可以用于管理计划任务和定期执行。Quartz.Net提供了丰富的作业计划选项,例如精确或模糊时间表达式、日期和时间限制等。Quartz.Net采用分布式架构,允许在多个计算机上运行任务。

Quartz.Net架构设计

Quartz.Net的架构设计采用了经典的MVC(Model-View-Controller)模式,其中:

  • Model:表示应用程序中的数据和状态。在Quartz.Net中,Model由Job和Trigger组成,并由Scheduler调度。
  • View:表示与用户交互的部分。在Quartz.Net中,View由Scheduler框架提供的API和UI组件组成。
  • Controller:负责处理用户输入并更新Model和View。在Quartz.Net中,Controller由Scheduler控制器组成。

Quartz.Net组件模块

Quartz.Net包含以下组件模块:

  • Scheduler:负责作业的调度和执行。Scheduler维护一个作业和触发器的调度列表,并根据定义的条件选择要调度的作业。
  • Job:表示要执行的作业。在Quartz.Net中,Job必须实现IJob接口。
  • Trigger:定义何时执行作业。在Quartz.Net中,有多种类型的触发器可供选择,例如简单触发器、Cron触发器等。
  • JobDetail:表示作业的详细信息,包括执行作业所需的Job类及其名称、描述和其他数据。
  • JobExecutionContext:在作业执行期间提供与应用程序和Quartz.Net框架交互所需的上下文信息。
  • SchedulerFactory:用于创建Scheduler的工厂类。

集成Quartz.Net

在NetCore项目中集成Quartz.Net,可以通过以下步骤实现:

  1. 安装Quartz.Net NuGet包
    在Visual Studio的NuGet包管理器中搜索安装Quartz.Net包,或通过命令行安装:dotnet add package Quartz。

  2. 创建作业类
    依据项目需求创建对应的作业类,并实现IJob接口,例如:

public class MyJob : IJob
{public async Task Execute(IJobExecutionContext context){await Console.Out.WriteLineAsync("Hello, Quartz.Net!");}
}
  1. 配置Scheduler
    在Startup.cs文件中添加配置代码,创建Scheduler,添加作业和触发器:
public void ConfigureServices(IServiceCollection services)
{services.AddSingleton<IJobFactory, SingletonJobFactory>();services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();services.AddSingleton(new JobSchedule(jobType: typeof(MyJob),cronExpression: "0/5 * * * * ?")); // 每5秒执行一次services.AddHostedService<QuartzHostedService>();
}public class JobSchedule
{public Type JobType { get; }public string CronExpression { get; }public JobSchedule(Type jobType, string cronExpression){JobType = jobType;CronExpression = cronExpression;}
}public class SingletonJobFactory : IJobFactory
{private readonly IServiceProvider _serviceProvider;public SingletonJobFactory(IServiceProvider serviceProvider){_serviceProvider = serviceProvider;}public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler){return (IJob)_serviceProvider.GetService(bundle.JobDetail.JobType);}public void ReturnJob(IJob job){// do nothing}
}public class QuartzHostedService : IHostedService
{private readonly ISchedulerFactory _schedulerFactory;private readonly IJobFactory _jobFactory;private readonly IEnumerable<JobSchedule> _jobSchedules;public QuartzHostedService(ISchedulerFactory schedulerFactory, IJobFactory jobFactory, IEnumerable<JobSchedule> jobSchedules){_schedulerFactory = schedulerFactory;_jobFactory = jobFactory;_jobSchedules = jobSchedules;}public async Task StartAsync(CancellationToken cancellationToken){var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);scheduler.JobFactory = _jobFactory;foreach (var jobSchedule in _jobSchedules){var jobDetail = JobBuilder.Create(jobSchedule.JobType).Build();var trigger = TriggerBuilder.Create().WithCronSchedule(jobSchedule.CronExpression).Build();await scheduler.ScheduleJob(jobDetail, trigger, cancellationToken);}await scheduler.Start(cancellationToken);}public async Task StopAsync(CancellationToken cancellationToken){var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);await scheduler.Shutdown(cancellationToken);}
}
  1. 启动和停止Scheduler
    在Main函数中启动调度程序:
public static async Task Main(string[] args)
{var host = CreateHostBuilder(args).Build();await host.RunAsync();
}

参考文档

  1. 官方网站:
    https://www.quartz-scheduler.net/
  2. 官方文档:
    https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html

http://www.ppmy.cn/ops/141545.html

相关文章

怎么自己创建一个网站? 开发语言首选 java,使用CMS网站内容管理系统是不错的选择

怎么自己创建一个网站 推荐使用 Java CMS 网站内容管理系统&#xff0c;根据网站规划的功能模块&#xff0c;创建不同的页面风格&#xff1b; 文章目录 怎么自己创建一个网站一、规划网站1.1确定网站主题和目的1.2规划网站结构和内容 二、注册域名2.1选择域名注册商2.2 查找并…

PHP无法读取.env的配置变量原因

今天帮一个客户在一台服务器配置laravel&#xff0c;在安装好宝塔后&#xff0c;配置了php环境&#xff0c;把laravel项目上传&#xff0c;并且在根目录的.env上配置好数据库等信息后&#xff0c;发现无法正常使用 通过排查发现.env的变量无法正常获取&#xff0c;排查了好久后…

OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇&#xff1a;识别图片颜色并绘制轮廓 1. 实验原理 颜色识别的原理&#xff1a; 颜色在图像处理中通常使用 HSV 空间来表示。 HSV 空间是基于人类视觉系统的一种颜色模型&#xff0c;其中&#xff1a; H&#xff08;Hue&#xff09;&#xff1a;色调&#xff0c;表示颜色…

windows C#-自动实现的属性

当属性访问器中不需要其他逻辑时&#xff0c;自动实现的属性使属性声明更加简洁。 它们还允许客户端代码创建对象。 当你声明以下示例中所示的属性时&#xff0c;编译器将创建仅可以通过该属性的 get 和 set 访问器访问的专用、匿名支持字段。 init 访问器也可以声明为自动实现…

FristiLeaks 1.3靶场渗透测试

FristiLeaks 1.3: https://www.vulnhub.com/entry/fristileaks-13,133/ 靶场&#xff1a;FristiLeaks 1.3靶场 攻击机&#xff1a;kali-linux-2024 1&#xff0c;在开启之前我们需要将靶机网络适配器改为NAT模式&#xff0c;并且对MAC地址进行手动编辑&#xff0c;VMware用户需…

开发一套SDK 第一弹

自动安装依赖包 添加条件使能 #ex: filetypesh bash_ls 识别 达到预期,多个硬件环境 等待文件文件系统挂在完成 或者创建 /sys/class/ 属性文件灌入配置操作 AI 提供的 netlink 调试方法,也是目前主流调用方法,socket yyds #include <linux/module.h> #include <linux…

HTML前端开发-- Iconfont 矢量图库使用简介

一、SVG 简介及基础语法 1. SVG 简介 SVG&#xff08;Scalable Vector Graphics&#xff09;是一种基于 XML 的矢量图形格式&#xff0c;用于在网页上显示二维图形。SVG 图形可以无限缩放而不会失真&#xff0c;非常适合用于图标、图表和复杂图形。SVG 文件是文本文件&#x…

Python数据分析(OpenCV视频处理)

处理视频我们引入的还是numpy 和 OpenCV 的包 引入方式如下&#xff1a; import numpy as np import cv2 我们使用OpenCV来加载本地视频&#xff0c;参数就是你视频的路径就可以 #加载视频 cap cv2.VideoCapture(./1.mp4) 下面我们进行读取视频 #读取视频 flag,frame cap.re…