Quartz.NET 2.x 快速入门指南:从安装到第一个定时任务
quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet
前言
Quartz.NET 是一个功能强大且灵活的开源作业调度框架,专为 .NET 平台设计。它允许开发者创建简单或复杂的定时任务调度,适用于从简单的后台任务到复杂的分布式系统作业调度等各种场景。本文将带你快速了解 Quartz.NET 的核心概念,并指导你完成第一个 Quartz.NET 应用程序的创建。
环境准备
安装方式选择
Quartz.NET 提供两种主要安装方式:
-
ZIP 压缩包安装:
- 适合需要源代码、示例和完整文档的开发者
- 包含 Quartz.NET 服务器示例应用程序
- 需要手动添加程序集引用
-
NuGet 包安装:
- 最快捷的安装方式
- 只包含运行 Quartz.NET 所需的二进制文件
- 自动处理依赖关系
通过 NuGet 安装(推荐)
对于大多数开发者,我们推荐使用 NuGet 包管理器进行安装:
- 在 Visual Studio 中右键点击项目引用
- 选择"管理 NuGet 程序包"
- 搜索"Quartz"
- 选择 Quartz.NET 并安装
或者使用 NuGet 命令行工具:
Install-Package Quartz
手动安装注意事项
如果选择 ZIP 压缩包安装,需要注意:
- 核心依赖只有两个:Quartz.dll 和 Common.Logging.dll
- Common.Logging 是一个日志抽象层,允许你使用自己喜欢的日志框架
- 确保将这两个 DLL 添加到项目引用中
基础配置
Quartz.NET 提供了灵活的配置方式,支持三种配置来源(可组合使用):
- 通过代码提供 NameValueCollection 参数
- 使用标准的 app.config/web.config 文件
- 使用独立的 quartz.config 文件
最小配置示例
创建一个 quartz.config 文件,内容如下:
quartz.scheduler.instanceName = MyScheduler
quartz.threadPool.threadCount = 3
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz
关键配置说明:
instanceName
:调度器实例名称threadCount
:线程池大小,决定同时运行作业的最大数量jobStore.type
:作业存储方式,RAMJobStore 表示内存存储(不持久化)
重要提示:在 Visual Studio 中,确保将 quartz.config 文件的"复制到输出目录"属性设置为"始终复制"。
创建第一个 Quartz.NET 应用
基础框架代码
让我们从一个最简单的调度器示例开始:
using System;
using System.Threading;
using Quartz;
using Quartz.Impl;
namespace QuartzSampleApplication
{
class Program
{
static void Main(string[] args)
{
try
{
// 从工厂获取调度器实例
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
// 启动调度器
scheduler.Start();
// 等待一段时间
Thread.Sleep(TimeSpan.FromSeconds(60));
// 关闭调度器
scheduler.Shutdown();
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
}
}
注意:调度器启动后会保持运行状态(使用非后台线程),直到显式调用 Shutdown() 方法。
添加日志输出
为了更好理解调度器的工作状态,我们可以添加控制台日志:
Common.Logging.LogManager.Adapter =
new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter
{
Level = Common.Logging.LogLevel.Info
};
添加日志后,启动程序将显示详细的调度器初始化信息。
创建并调度第一个作业
定义作业类
作业是 Quartz.NET 中的核心概念,每个作业必须实现 IJob 接口:
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Greetings from HelloJob!");
}
}
创建作业和触发器
在调度器启动后,添加以下代码来创建并调度作业:
// 定义作业
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// 创建触发器:立即启动,每10秒重复一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
// 将作业与触发器关联
scheduler.ScheduleJob(job, trigger);
完整示例代码
using System;
using System.Threading;
using Quartz;
using Quartz.Impl;
namespace QuartzSampleApplication
{
class Program
{
static void Main(string[] args)
{
try
{
// 配置日志
Common.Logging.LogManager.Adapter =
new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter
{
Level = Common.Logging.LogLevel.Info
};
// 获取调度器实例
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
// 定义作业
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// 创建触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
// 调度作业
scheduler.ScheduleJob(job, trigger);
// 等待60秒
Thread.Sleep(TimeSpan.FromSeconds(60));
// 关闭调度器
scheduler.Shutdown();
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
}
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Greetings from HelloJob!");
}
}
}
运行结果
运行程序后,你将看到:
- 详细的调度器初始化日志
- 每10秒输出一次"Greetings from HelloJob!"
- 60秒后程序自动关闭
下一步建议
现在你已经完成了第一个 Quartz.NET 应用程序,接下来可以探索:
- 更复杂的触发器配置(如 Cron 表达式)
- 作业数据传递(JobDataMap)
- 持久化作业存储(如数据库存储)
- 监听器和插件机制
- 集群部署和故障转移
Quartz.NET 提供了丰富的功能来满足各种复杂的调度需求,这个快速入门只是帮助你迈出了第一步。
quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考