介绍
在日常开发中,定时任务是非常常见的需求,例如定时生成业务报表、定时发送通知消息、定时清理系统冗余数据、定时同步第三方平台数据等。如果每个项目都从零开始搭建一套调度体系,不仅重复劳动较多,后期维护成本也会持续上升。
Quartz.NET 是 .NET 领域最成熟的定时任务框架之一,支持简单定时、Cron 表达式定时、任务暂停、任务恢复、动态添加任务等能力,稳定性与可靠性都很高,适用于生产环境下的任务调度场景。
本次在 HQServer 框架中集成 Quartz.NET,并将配置读取、任务定义、任务注册、托管服务统一封装到 Common 层。后续开发者只需要新增任务类、配置定时规则,即可快速实现各类定时任务的开发与部署,无需重复搭建定时任务调度体系。
实现
1. 安装 Quartz 依赖
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.15.1" />
通过该依赖可以直接将 Quartz 调度能力集成到 ASP.NET Core 应用生命周期中。
2. 定义 Quartz 配置模型
public class QuartzOptions
{
public bool Enabled { get; set; } = true;
public List<QuartzJobOptions> Jobs { get; set; } = new();
}
public class QuartzJobOptions
{
public string Name { get; set; } = string.Empty;
public string? Group { get; set; }
public string Type { get; set; } = string.Empty;
public string Cron { get; set; } = string.Empty;
public string? Description { get; set; }
public bool Enabled { get; set; } = true;
public bool RunOnStart { get; set; } = false;
}
3. 统一注册入口
builder.Services.AddHQJwtAuthentication(builder.Configuration);
builder.Services.AddHQQuartz(builder.Configuration, typeof(Program).Assembly);
这样应用启动时就会自动加载 Quartz 配置,并将符合规则的任务统一注册到调度器中。
4. 配置基础测试任务
"Quartz": {
"Enabled": true,
"Jobs": [
{
"Name": "TestQuartzJob",
"Group": "Default",
"Type": "HQ.Application.TestQuartzJob",
"Cron": "0/30 * * * * ?",
"Description": "Quartz基础测试任务,每30秒执行一次",
"Enabled": true,
"RunOnStart": true
}
]
}
5. 编写测试任务类
public class TestQuartzJob : IJob
{
private readonly ILogger<TestQuartzJob> _logger;
public TestQuartzJob(ILogger<TestQuartzJob> logger)
{
_logger = logger;
}
public Task Execute(IJobExecutionContext context)
{
_logger.LogInformation("Quartz 测试任务执行成功,执行时间:{ExecuteTime}", DateTimeOffset.Now);
return Task.CompletedTask;
}
}
特点
1. 无重复造轮子:采用成熟稳定的 Quartz.NET 作为底层调度框架。
2. 统一封装:任务配置、任务解析、任务注册、托管服务全部沉淀在 Common 层。
3. 配置驱动:通过配置文件即可控制任务启用、Cron 规则、启动执行等行为。
4. 易于扩展:支持后续扩展动态添加任务、暂停任务、恢复任务等能力。
5. 生产可用:Quartz.NET 在 .NET 生态中应用广泛,稳定性高。
使用示例
public class ReportGenerateJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
// 生成日报表
return Task.CompletedTask;
}
}
public class NotifyJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
// 发送通知消息
return Task.CompletedTask;
}
}
public class CleanupJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
// 清理冗余数据、过期日志、临时缓存等
return Task.CompletedTask;
}
}
完整代码
HQ.Common
└── Scheduling
├── QuartzOptions.cs
├── QuartzJobAttribute.cs
├── QuartzJobDefinition.cs
├── QuartzJobDefinitionProvider.cs
└── QuartzServiceCollectionExtensions.cs
HQ.Application
├── Program.cs
├── appsettings.json
└── TestQuartzJob.cs
总结
本次完成后,HQServer 框架已经具备基础的 Quartz.NET 定时任务调度能力:支持统一配置任务、支持 Cron 表达式调度、支持启动自动注册、支持测试任务快速验证、支持后续新增业务任务直接接入。
后续如果还需要继续增强,可以在当前基础上逐步补充动态新增/删除任务、任务暂停与恢复、任务执行日志持久化、执行失败重试、多节点分布式调度控制、后台任务管理界面等能力。









暂无评论内容