Quartz.NET学习笔记(一) 简介

Quartz.NET是一款开源的任务调度框架,他是由Java中的任务调度框架Quartz移植而来的。官方网站https://www.quartz-scheduler.net/

 

Quartz.Net的特性

 

运行环境#

  • Quartz.NET可以寄宿在其他的.NET程序中运行
  • Quartz.NET可以作为独立程序运行
  • Quartz.NET可以在集群中使用,支持负载均衡和故障切换

 

任务调度#

  • 任务和触发器是多对一关系, 同一个任务可以绑定到多个触发器中,但是一个触发器只能绑定一个任务
  • 触发器可以在某天特定时间触发
  • 触发器可以在一周某一天触发(周一-周日)
  • 触发器可以在一个月中某一天触发
  • 触发器可以在一年某一天触发
  • 触发器支持排除日期列表
  • 触发器支持指定次数的重复触发
  • 触发器支持无限次数的重复触发
  • 触发器支持直到某个时间/日期重复触发
  • 触发器支持一定时间间隔的重复触发

 

任务执行#

  • 所有的任务类都必须实现IJob接口
  • 所有的定义的任务类都可以由NET实例化
  • 当触发器触发,调度器会根据当前任务的状态通知所有JobListener和TriggerListener
  • 当任务完成时,系统会返回一个任务完成码来通知调度器任务成功还是失败,调度器可以根据任务完成码做出不同的反应。

 

任务持久化#

  • 支持使用NET进行任务持久化
  • 支持使用内存进行任务持久化
  • 自定义持久化(实现IJobStore接口)

 

简单例子

首先我们先用一个简单例子,对Quartz.NET有一个大概的了解。

创建项目#

打开Visual Studio, 创建一个简单的控制台程序

 

添加Quartz.NET库#

我们可以从官网下载最新的Quartz.NET的库,但是使用Nuget来管理.NET库更便捷。

 

打开Package Manager Console,输入

install-package Quartz

添加第一个任务#

添加一个新类FirstJob.cs, 其代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
 public class FirstJob : IJob
 
    {
 
        public void Execute(IJobExecutionContext context)
 
        {
 
            Console.WriteLine("Hello World.");
 
        }
 
    }



 

 

所有的任务都必须实现IJob接口, IJob接口中只包含一个需要实现的方法Execute, 该方法中加入的代码,即这个任务需要干的事情。

 

创建调度器#

在Program.cs的Main方法中加入以下代码

 

1
2
3
4
5
6
7
            ISchedulerFactory schedFact = new StdSchedulerFactory();
 
  
 
            IScheduler sched = schedFact.GetScheduler();
 
            sched.Start();



 

 

 

这里使用的是抽象工厂模式, 使用默认的调度器工厂StdSchedulerFactory来创建一个调度器。所有的调度器都需要手动调用Start()方法来启动。

 

创建任务和触发器#

在Main方法中继续添加以下代码

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            IJobDetail job = JobBuilder.Create<FirstJob>()
 
                .WithIdentity("myJob", "group1")
 
                .Build();
 
  
 
            ITrigger trigger = TriggerBuilder.Create()
 
              .WithIdentity("myTrigger", "group1")
 
              .StartNow()
 
              .Build();



 

 

 

这里JobBuilder负责根据指定的任务类型产生一个任务项,并绑定任务需要的参数或者为任务进行分组。

 

TriggerBuilder负责产生不用类型的触发器,前面特性里面有说明,触发器有很多类型,都是在这里设置的,并且在这里可以对触发器进行分组。这里StartNow()表示触发器加入调度器后,立即执行。

 

使用调度器,绑定触发器和任务#

前面我们只是创建了任务和触发器,他们之间现在还没有任何关联。

 

下面我们在Main方法中加入最后一行代码

1
sched.ScheduleJob(job, trigger);

 

调度器将触发器和任务绑定在一起。

 

最终实现效果#

启动项目,效果如下,  Hello World正确显示了

 

posted @   LamondLu  阅读(394)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
主题色彩