【ASP.NET CORE】8.Quartz.NET定时任务调度

介绍

在日常开发中,定时任务是非常常见的需求,例如定时生成业务报表、定时发送通知消息、定时清理系统冗余数据、定时同步第三方平台数据等。如果每个项目都从零开始搭建一套调度体系,不仅重复劳动较多,后期维护成本也会持续上升。

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 表达式调度、支持启动自动注册、支持测试任务快速验证、支持后续新增业务任务直接接入。

后续如果还需要继续增强,可以在当前基础上逐步补充动态新增/删除任务、任务暂停与恢复、任务执行日志持久化、执行失败重试、多节点分布式调度控制、后台任务管理界面等能力。

© 版权声明
THE END
喜欢就支持一下吧
点赞9分享
评论 抢沙发

请登录后发表评论

    暂无评论内容