在 .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.解释

  1. 作业类(MyJob.cs):这个类实现了 Quartz 的 IJob 接口,定义了作业的具体逻辑。每次作业执行时,输出当前时间。
  2. 调度服务(QuartzExtensions.cs):QuartzExtensions类负责创建并调度作业。它定义了 ConfigureQuartzJobs方法,配置了 MyJob作业与触发器(每 5 秒执行一次)。
  3. 启动项(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触发
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐