轻松掌握Quartz.NET:在.NET Core (.NET 5)中实现高效作业调度
·
在 .NET Core 中使用 Quartz.NET 进行定时任务调度是一种非常常见的做法。Quartz.NET 是一个功能强大的作业调度库,支持复杂的调度规则和任务执行。逻辑可以拆分成多个类,通过控制器来调用定时任务。这种方法将使得代码结构更加清晰,易于维护和扩展。以下是通过控制器调用 Quartz.NET 作业调度的完整代码示例。
1.安装 Quartz.NET
首先,我们需要安装 Quartz 。可以通过 NuGet 来安装。
使用 NuGet Package Manager 安装:
Install-Package Quartz
或通过NuGet包管理器

2.项目结构
1.Jobs/MyJob.cs:定义作业类,执行任务。
2.QuartzExtensions.cs:负责调度作业,管理作业与触发器。
3.Program.cs:配置依赖注入并启动应用。
3.定义作业类
1.新建类库

2.新建MyJob.cs 文件
using Microsoft.Extensions.Logging;
using Quartz;
using Serilog;
using System;
using System.Threading.Tasks;
namespace QuartzMnager
{
public class MyJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Log.Information($"myjob:{DateTime.Now}");
return Task.CompletedTask;
}
}
}
4.配置服务与启动应用
1.新建ASP.NET Core Web 应用

2.新建文件 QuartzServer.cs
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using QuartzMnager;
namespace QuartzServer
{
public static class QuartzExtensions
{
public static void ConfigureQuartzJobs(this IServiceCollection services)
{
services.AddQuartz(q =>
{
//5秒执行一次
var job1Key = new JobKey("MyJob", "group1");
q.AddJob<MyJob>(opts => opts.WithIdentity(job1Key));
q.AddTrigger(opts => opts.ForJob(job1Key)
.WithIdentity("trigger1", "group1")
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
);
});
services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
}
}
}
注:5秒执行一次 可自定义Corn表达式
q.AddTrigger(opts => opts.ForJob(job1Key)
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/5 * * * * ?")
3.Satrtup.cs 文件修改
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.ConfigureQuartzJobs();
}
5.解释
- 作业类(MyJob.cs):这个类实现了 Quartz 的 IJob 接口,定义了作业的具体逻辑。每次作业执行时,输出当前时间。
- 调度服务(QuartzExtensions.cs):QuartzExtensions类负责创建并调度作业。它定义了 ConfigureQuartzJobs方法,配置了 MyJob作业与触发器(每 5 秒执行一次)。
- 启动项(Program.cs):只负责应用程序的启动与停止
6.总结

7.常用表达式例子
(1)0/2 * * * * ? 表示每2秒 执行任务
(2)00/2 * * * ? 表示每2分钟 执行任务
(3)0021 * ? 表示在每月的1日的凌晨2点调整任务
(4)01510 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
(5)01510 ? 6L2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
(6)0010,14,16 * * ? 每天上午10点,下午2点,4点
(7)00/309-17 * * ? 朝九晚五工作时间内每半小时
(8)0012 ? * WED 表示每个星期三中午12点
(9)0012 * * ? 每天中午12点触发
(10)01510 ? * * 每天上午10:15触发
(11)01510 * * ? 每天上午10:15触发
(12)01510 * * ? 每天上午10:15触发
(13)01510 * * ? 2005 2005年的每天上午10:15触发
(14)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
(15)00/514 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
(16)00/514,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(17)00-514 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
(18)010,4414 ? 3WED 每年三月的星期三的下午2:10和2:44触发
(19)01510 ? * MON-FRI 周一至周五的上午10:15触发
(20)0151015 * ? 每月15日上午10:15触发
(21)01510L * ? 每月最后一日的上午10:15触发
(22)01510 ? * 6L 每月的最后一个星期五上午10:15触发
(23)01510 ? * 6L2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
(24)01510 ? * 6#3 每月的第三个星期五上午10:15触发
更多推荐
所有评论(0)