C#定时任务框架Quartz.NET介绍与用法

什么是定时任务?

最近恰巧有类似的需求, 需要做一个应用程序服务, 每天定时给服务器上传采集的数据。

在没有任务框架的使用前提下, 如果我们想要实现类似的需求,可以自己写一个计时器, 然后24小时运行,达到指定的时间就运行。但是这样不仅扩展性差, 而且不易于维护。

在定时任务这块, 也有非常的多的框架支持,开箱即用, 那么下面将主要介绍一下Quartz.NET框架

Github

Quartz.NET介绍

Quartz.NET是一个Github开源项目,用于创建一个免费商业用途的作业调度框架。

注:支持 .NET Core/.NET Standard 2.0 和 .NET 框架 4.6.1 及更晚版本。

Quartz.NET入门

在我们使用定时任务框架的之前, 首先我们需要确定的是, 它大概具备哪些内容。

  • 灵活的指定某项任务
  • 灵活的启动时间配置
  • 传递参数并且监听

了解了这些基础概念之后, 我们便开始学习如何在Quartz.NET当中使用这些功能。

1.创建一个任务

任务是一个抽象的概念, 实际来说它应该指的是某种任务, 例如: 想要每3秒输入一个字符串, 那么我们就可以这样做。

  • 下面演示创建了一个类, 它继承于IJob接口, 实现了Execute方法, 任务就是输出一个字符串。
    public class TestJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync($"{DateTime.Now}:Hello!");
        }
    }
  • 创建任务
            //创建一个工作
            IJobDetail job = JobBuilder.Create<TestJob>()
             .WithIdentity("TestJob", "Test")
            .Build();

2.配置任务的参数

为任务配置一个触发条件及相关的参数。当该配置的参数一旦达到了条件, 上面的任务将被触发。

            //创建一个触发条件
            ITrigger trigger = TriggerBuilder.Create()
               .WithIdentity("TestJobTrigger", "Test")
               .WithSimpleSchedule(x =>
               {
                   x.WithIntervalInSeconds(3).RepeatForever();
               })
               .Build();

3.启动任务

创建一个任务调度器, 将任务和配置参数添加到调度器当中。

            StdSchedulerFactory factory = new StdSchedulerFactory();
            //创建任务调度器
            IScheduler scheduler = await factory.GetScheduler();
            //启动任务调度器
            scheduler.Start();  

            //将创建的任务和触发器条件添加到创建的任务调度器当中
            scheduler.ScheduleJob(job, trigger);

4.实际效果

在上面的代码中,我们创建了一个任务输出一段字符串, 然后为该任务创建了一个配置, 每3秒执行一次, 那么实际效果会每间隔3秒输出:

更多配置

  • 特定时间触发,重复触发,单次触发, 触发次数,开始时间, 结束时间。 这些在框架当中都有该功能
  • 触发器表达式 ,例如: 每周一上午, 或每周一、周三、周五等等

    下面是一些表达式及其含义的示例示例 1 - 创建每 5 分钟触发一次的触发器的表达式

"0 0/5 * * * ?"

示例 2 - 创建每 5 分钟触发一次的触发器的表达式,在分钟后 10 秒(即上午 10:00:10、上午 10:05:10 等)。

"10 0/5 * * * ?"

示例 3 - 用于创建触发器的表达式,该触发器在每个星期三和周五的 10:30、11:30、12:30 和 13:30 触发。

"0 30 10-13 ? * WED,FRI"

示例 4 - 创建触发器的表达式,在每月 5 日到 20 日上午 8 点到上午 10 点之间每半小时触发一次。请注意,触发器不会于上午 10:00 触发,只是在 8:00、8:30、9:00 和 9:30

"0 0/30 8-9 5,20 * ?"

点击查看更多触发器表达式

  • 监听器: 可以检测你的任务执行状态: 是否工作, 是否错误,是否已完成等

关于具体的使用方法, 在文档中有详细的介绍:

查看Quartz.NET文档

到此这篇关于C#定时任务框架Quartz.NET介绍与用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有"内置"定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对的问题:计时器没有持久化机制:计时器具有不灵活的计划(仅能设置开始时间和重复间隔,没有基于日期,时间等):计时器不使用线程池(每个定时器一个线程):计时器没有真正的管理方案 - 你必须编写自己的机制,以便能够记住,组织和检索任务的名称等. 如果需要在.NET实现定时器的功能,可以尝试使用以

  • Quartz.Net实现原理及使用方法详解

    调度器(scheduler)必须在实例化之后才能使用(谁能想到呢?).你可以通过一个ISchedulerFactory接口的实例来实现它. 实例化调度器(scheduler)后,可以启动.处于待机模式或者关闭.注意,一个调度器(scheduler)一旦被关闭,它必须被重新实例化才可以再次启动.直到调度器(scheduler)启动,触发器(Triggers)才会被触发(执行任务(job)),但处于暂停模式的触发器(trigger)不会被触发. 这里有一段简单的代码,实例化了一个调度器(schedu

  • .Net Core中使用Quartz.Net实践记录

    一.介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中.它灵活而不复杂.你能够用它来为执行一个作业而创建简单的或复杂的作业调度.它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等. 通俗说它的功能是:比如说我想每天晚上2点让程序或网站执行某些代码,或者每隔5秒种我想查看是否有新的任务要处理等. Quartz.Net是根据Java的Qu

  • Quartz.Net使用方法详解

    目录 Hello Quartz.Net 作业:Job和JobDetail JobData JobDetail 持久化JobData 触发器:Trigger SampleTrigger CronTrigger 日历:Calendar 监听器 JobListener TriggerListener SchedulerListener 持久化:JobStore ADO.NET存储 负载均衡 通过Routing访问Quartz实例 开发实践 参考资料 在项目的开发过程中,难免会遇见后需要后台处理的任务,

  • Quartz.NET的具体使用

    目录 一.什么是Quartz.NET? 二.Quartz.NET可以做什么? 三.ASP.NET Core如何使用Quartz.NET? 四.Quartz的cron表达式 一.什么是Quartz.NET? Quartz.NET 是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统. Quartz.NET是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现. 二.Quartz.NET可以做什么? Quartz.NET很多特征,如:数据库支持,集

  • Quartz.Net调度框架配置解析

    在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天就来介绍个开源的调度框架Quartz.Net(主要介绍配置的实现,因为有朋友问过此类问题).调度的实现代码很简单,在源码中有大量Demo,这里就略过了. Quartz.Net当前最新版本Quartz.NET 2.0 beta 1 Released 一.基于文件配置 先看一下简单的实现代码 using

  • .net下Quartz.Net的使用方法

    Quartz.net是作业调度框架,具体内容如下 1. 项目中添加quartz.net的引用(这里使用nuget管理) 新建一个类TimingJob,该类主要用于实现任务逻辑 using Quartz; using System; namespace QuartzNetDemo { /// <summary> /// 定时任务类 /// </summary> public class TimingJob : IJob { public void Execute(IJobExecut

  • Quartz.Net任务和触发器实现方法详解

    Quartz API Quartz API的主要接口和类如下: IScheduler - 和调度器交互的主要API IJob - 调度器会执行实现这个接口的实例 IJobDetail - 用来定义任务的实例 ITrigger - 定义任务执行安排的组件 JobBuilder - 用来定义/构造JobDetail的实例,其中JobDetail的实例定义Jobs的实例 TriggerBuilder - 用来定义/构造Trigger的实例 在本文中,为了可读性,下列说法可互换: IScheduler

  • C#定时任务框架Quartz.NET介绍与用法

    什么是定时任务? 最近恰巧有类似的需求, 需要做一个应用程序服务, 每天定时给服务器上传采集的数据. 在没有任务框架的使用前提下, 如果我们想要实现类似的需求,可以自己写一个计时器, 然后24小时运行,达到指定的时间就运行.但是这样不仅扩展性差, 而且不易于维护. 在定时任务这块, 也有非常的多的框架支持,开箱即用, 那么下面将主要介绍一下Quartz.NET框架 Github Quartz.NET介绍 Quartz.NET是一个Github开源项目,用于创建一个免费商业用途的作业调度框架. 注

  • 5分钟快速掌握Python定时任务框架的实现

    APScheduler 简介 在实际开发中我们经常会碰上一些重复性或周期性的任务,比如像每天定时爬取某个网站的数据.一定周期定时运行代码训练模型等,类似这类的任务通常需要我们手动来进行设定或调度,以便其能够在我们设定好的时间内运行. 在 Windows 上我们可以通过计划任务来手动实现,而在 Linux 系统上往往我们会用到更多关于 crontab 的相关操作.但手动管理并不是一个很好的选择,如果我们需要有十几个不同的定时任务需要管理,那么每次通过人工来进行干预未免有些笨拙,那这时候就真的是「人

  • springboot整合quartz定时任务框架的完整步骤

    目录 Spring整合Quartz pom文件 对应的properties 文件 配置类 自定义任务类:ScheduledTask 获取spring中bean的工具类:SpringContextUtil 定时任务服务接口:QuartzService QuartzService实现类:QuartzServiceImpl ScheduledTaskRunner类 任务实体类:QuartzTask 任务service层 service实现类 任务controller 数据表 具体使用 具体效果 总结

  • SpringBoot 整合 Quartz 定时任务框架详解

    目录 前言 一.简单聊一聊 Quartz 1.1.Quartz 概念 二.SpringBoot 使用 Quartz 2.1.基本步骤 2.2.执行 Quartz 需要的SQL文件 2.3.Controller 2.4.Service 划重点 2.5.实体类 2.6.简单的 Job 案例 2.7.那么该如何使用呢? 前言 在选择技术栈之前,一定要先明确一件事情,你真的需要用它吗?还有其他方式可以使用吗? 相比其他技术技术,优点在哪里呢?使用了之后的利与弊等等. 写这个主要是因为一直想写一下定时任务

  • WPF框架Prism中区域Region用法介绍

    什么是区域(Region)? 在理解这个之前, 首先需要了解一下, 在最常见的开发模式当中, 我们去设计某个页面的时候, 实际上界面元素在设计的时候已经被固定. 举个简单的例子,当我们去设计如下页面, 它包含Header.Menu.Content内容. 因此我们可以为这个页面设计一些元素, 例如: 1.Menu 可以放置ListBox 2.Content 可以放置一个ContentControl 3.Header 可以放置一些ToolBar 注:为了演示需要, 对应区域的控件均采用TextBlo

  • WPF框架Prism中导航Navigation用法介绍

    使用场景 在普遍的业务场景当中, 必不可少的是页面切换, 而Prism就可以使用Navigation功能来进行页面导航, 在不同的场景当中会有各种用法, 例如在切换页面验证.传递参数.返回上一页.返回下一页等功能. 导航的基本条件 1.注册显示区域 2.注册导航页面 1.注册导航 注册视图类型或添加别名, 如果为指定别名,名称默认为当中类型的名称 public class ModuleAModule : IModule { public void OnInitialized(IContainer

  • WPF框架Prism中View Injection用法介绍

    View View通常指的是, 我们定义的页面, 而在模块化的系统当中, 我们往往称之为用户控件(UserControl).对于模块化系统而言, 每个模块当中都有N个用户控件组成, 然后模块向区域当中注册视图. View Injection 在介绍Region章节当中所讲到, RegionManager的功能: 维护区域集合 提供对区域的访问 合成视图 区域导航 定义区域 这意味着, 我们可以在模块当中为区域指定视图, 这个时候,我们就可以通过依赖注入的方式,使用IRegionManager接口

  • WPF框架Prism中对话框Dialog用法介绍

    什么是Dialog? 对话框实际上是我们应用程序经常用到的一个功能, 类如: Show.ShowDialog. 可以弹出一个我们指定的窗口, 仅此而已, 那么在Prism当中, Dialog指的是什么? Prism提供了一组对话服务, 封装了常用的对话框组件的功能, 例如: RegisterDialog/IDialogService (注册对话及使用对话) 打开对话框传递参数/关闭对话框返回参数 回调通知对话结果 创建Dialog流程 创建对话框,通常是一组用户控件 ,并且实现 IDialogA

  • Python定时任务框架APScheduler安装使用详解

    目录 前言 一.APscheduler简介 二.APscheduler安装 三.APscheduler组成部分 1.Job 作业 2.Trigger 触发器 3.Jobstore 作业存储 4.Executor 执行器 5.scheduler 调度器 四.Scheduler工作流程图 1.Scheduler添加job流程 2.Scheduler调度流程 五.APscheduler使用 1.简单应用 2.操作作业 2.1 date触发器 2.2 interval触发器 2.3 cron触发器 参考

  • Python中定时任务框架APScheduler的快速入门指南

    前言 大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法. 一.APScheduler介绍 APScheduler是基于Quartz的一个python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务. APScheduler提供了多种不同的调度器,方便开发者根据自己的实际需要进行使用:同时也提供了不同的存储机

随机推荐