首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Quartz.NET 在 ASP.NET Core 中的完整使用指南

Quartz.NET 在 ASP.NET Core 中的完整使用指南

作者头像
郑子铭
发布2025-07-27 10:04:29
发布2025-07-27 10:04:29
3700
举报

适用于 .NET 6+ / ASP.NET Core 的 Quartz.NET 完整使用指南,包含任务调度、依赖注入、持久化、动态控制等核心功能。

🔍 1. 简介

Quartz.NET 是一个开源的作业调度框架,功能强大且灵活,适用于需要定时执行任务的场景。其主要特性包括:

  • • 支持 Cron 表达式
  • • 持久化任务信息到数据库
  • • 分布式部署能力
  • • 动态添加/暂停/恢复/删除任务
  • • 集成 ASP.NET Core 依赖注入系统

核心组件

组件

描述

IJob

实现具体业务逻辑的任务类

Trigger

控制任务触发规则(如时间间隔或 Cron 表达式)

Scheduler

调度器,负责管理并运行任务

JobStore

存储任务信息(内存或数据库)


📦 2. 安装

使用 .NET CLI 安装 Quartz.NET 及相关扩展包:

代码语言:javascript
复制
dotnet add package Quartz
dotnet add package Quartz.Extensions.Hosting

如需持久化支持(SQL Server):

代码语言:javascript
复制
dotnet add package Quartz.Plugins
dotnet add package Quartz.Serialization.Json

⚙️ 3. 基本使用

创建 Job 类

代码语言:javascript
复制
using Quartz;

public class HelloJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        Console.WriteLine($"Hello! 当前时间: {DateTime.Now}");
        return Task.CompletedTask;
    }
}

注册 Quartz 到 DI 容器(ASP.NET Core)

Program.cs 中注册 Quartz 服务:

代码语言:javascript
复制
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddQuartz(q =>
{
    q.AddJob<HelloJob>(opts => opts.WithIdentity("HelloJob"));

    q.AddTrigger(opts => opts
        .ForJob("HelloJob")
        .WithIdentity("HelloJob-trigger")
        .WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever()));
});

builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

var app = builder.Build();
app.Run();

⏰ 4. 使用 Cron 表达式

Cron 表达式提供更灵活的时间调度方式。

代码语言:javascript
复制
q.AddTrigger(opts => opts
    .ForJob("HelloJob")
    .WithIdentity("cron-trigger")
    .WithCronSchedule("0/10 * * * * ?")); // 每 10 秒执行一次

📌 提示: 推荐使用 https://cron.ciding.cc 工具辅助生成表达式。


💡 5. 依赖注入支持

Quartz 支持通过构造函数注入服务,例如发送邮件的服务。

示例代码

代码语言:javascript
复制
public classEmailJob : IJob
{
    privatereadonly IEmailService _emailService;

    public EmailJob(IEmailService emailService)
    {
        _emailService = emailService;
    }

    public Task Execute(IJobExecutionContext context)
    {
        return _emailService.SendAsync("定时邮件", "Quartz.NET 发来的");
    }
}

注册服务

代码语言:javascript
复制
builder.Services.AddTransient<IEmailService, EmailService>();
builder.Services.AddQuartz(q =>
{
    q.UseMicrosoftDependencyInjectionJobFactory(); // 启用 DI 工厂
    q.AddJob<EmailJob>(opts => opts.WithIdentity("EmailJob"));
});

💾 6. 任务持久化(数据库存储)

安装包

代码语言:javascript
复制
dotnet add package Quartz.Plugins
dotnet add package Quartz.Serialization.Json

配置 SQL Server 数据库

代码语言:javascript
复制
builder.Services.AddQuartz(q =>
{
    q.UsePersistentStore(options =>
    {
        options.UseProperties = true;
        options.UseSqlServer("YourConnectionString");
        options.UseJsonSerializer();
    });
});

数据库建表脚本

前往官方 GitHub 获取建表脚本: 🔗 Quartz.NET Schema


🔄 7. 动态控制任务

可以通过 IScheduler 接口实现任务的动态控制:

代码语言:javascript
复制
var scheduler = await schedulerFactory.GetScheduler();

// 暂停任务
await scheduler.PauseJob(new JobKey("HelloJob"));

// 恢复任务
await scheduler.ResumeJob(new JobKey("HelloJob"));

// 删除任务
await scheduler.DeleteJob(new JobKey("HelloJob"));
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🔍 1. 简介
    • 核心组件
  • 📦 2. 安装
  • ⚙️ 3. 基本使用
    • 创建 Job 类
    • 注册 Quartz 到 DI 容器(ASP.NET Core)
  • ⏰ 4. 使用 Cron 表达式
  • 💡 5. 依赖注入支持
    • 示例代码
    • 注册服务
  • 💾 6. 任务持久化(数据库存储)
    • 安装包
    • 配置 SQL Server 数据库
    • 数据库建表脚本
  • 🔄 7. 动态控制任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档