百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

haoteby 2025-10-08 17:07 16 浏览

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


1. 简介

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

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

核心组件

组件描述IJob实现具体业务逻辑的任务类Trigger控制任务触发规则(如时间间隔或 Cron 表达式)Scheduler调度器,负责管理并运行任务JobStore存储任务信息(内存或数据库)


2. 安装

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

dotnet add package Quartz
dotnet add package Quartz.Extensions.Hosting

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

dotnet add package Quartz.Plugins
dotnet add package Quartz.Serialization.Json

3. 基本使用

创建 Job 类

using Quartz;

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

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

Program.cs 中注册 Quartz 服务:

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(5).RepeatForever()));
});

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

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

4. 使用 Cron 表达式

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

q.AddTrigger(opts => opts
    .ForJob("HelloJob")
    .WithIdentity("cron-trigger")
    .WithCronSchedule("0/10 * * * * ?")); // 每 10 秒执行一次

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


5. 依赖注入支持

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

示例代码

public class EmailJob : IJob
{
    private readonly IEmailService _emailService;

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

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

注册服务

builder.Services.AddTransient<IEmailService, EmailService>();
builder.Services.AddQuartz(q =>
{
    q.UseMicrosoftDependencyInjectionJobFactory(); // 启用 DI 工厂
    q.AddJob<EmailJob>(opts => opts.WithIdentity("EmailJob"));
});

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

安装包

dotnet add package Quartz.Plugins
dotnet add package Quartz.Serialization.Json

配置 SQL Server 数据库

builder.Services.AddQuartz(q =>
{
    q.UsePersistentStore(options =>
    {
        options.UseProperties = true;
        options.UseSqlServer("YourConnectionString");
        options.UseJsonSerializer();
    });
});

数据库建表脚本

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


7. 动态控制任务

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

var scheduler = await schedulerFactory.GetScheduler();

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

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

// 删除任务
await scheduler.DeleteJob(new JobKey("HelloJob"));

欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

OpenVPN客户端配置_openvpn客户端配置文件解析

...

k8s 证书问题排查_k8s dashboard 证书

从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...

企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战

企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...

OpenV** Server/Client配置文件详解

Server配置详解...

接口基础认知:关键信息与合规前提

1.核心技术参数(必记)...

S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)

说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...

SSL证书如何去除私钥密码保护_ssl证书怎么取消

有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...

SSL证书基础知识与自签名证书生成指南

一、证书文件类型解析...

S交换机通过SSH登录设备配置示例(RADIUS认证)

说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

HTTPS TLS握手流程_进行tls握手

1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....

Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt

SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...

源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章

在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...

微信支付商户API证书到期 怎么更换

微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...