Quartz.net 正则表达式触发器

1、创建项目

项目类型控制台应用程序,.Net Framework框架版本 4.7.2

2、引入框架

复制代码
NuGet\Install-Package Quartz -Version 3.8.0

3、创建Job

自定义Job实现接口IJob,在Execute方法实现定时逻辑,

cs 复制代码
using Quartz;
using System;
using System.Threading.Tasks;

namespace QuartzConsole
{
    public class MyJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Console.Out.WriteLineAsync($"任务开始执行了:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
        }
    }
}

4、创建调度器实例

使用工厂类StdSchedulerFactory创建调度器实例,

cs 复制代码
StdSchedulerFactory factory = new StdSchedulerFactory();//创建工厂实例
            var scheduler = await factory.GetScheduler();//创建调度器
            await scheduler.Start();//启动调度器

5、创建Job实例

使用Job构建器创建任务实例,

cs 复制代码
IJobDetail job = JobBuilder.Create<MyJob>()
                .WithIdentity("job1", "group1")
                .Build();

6、创建触发器

使用触发器构建器创建触发器实例,触发器包含简单触发器和正则表达式触发器,比如重复执行多少次这种简单的逻辑,可以使用简单触发器,比如每天21点-23点,每隔2分钟的第5秒开始执行任务,则适合使用正则表达式触发器来构建。

简单触发器:

cs 复制代码
 #region 简单触发器,每隔5秒重复执行
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger", "group1")
                .WithSimpleSchedule(x=>x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
                .Build();
            #endregion

正则表达式触发器:

cs 复制代码
#region 每天21点-23点,每隔2分钟的第5秒开始执行
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger", "group1")
                .WithCronSchedule("5 0/2 21-23 * * ?")
                .Build();
            #endregion

触发器正则表达式生成可以借助工具,参考链接:

Free Online Cron Expression Generator and Describer - FreeFormatter.com

7、将任务和触发器安排到调度器

cs 复制代码
await scheduler.ScheduleJob(job, trigger);

8、完整代码

cs 复制代码
using Quartz;
using Quartz.Impl;
using Quartz.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QuartzConsole
{
    class Program
    {
        async static Task Main(string[] args)
        {
            StdSchedulerFactory factory = new StdSchedulerFactory();
            var scheduler = await factory.GetScheduler();
            await scheduler.Start();

            IJobDetail job = JobBuilder.Create<MyJob>()
                .WithIdentity("job1", "group1")
                .Build();

            //#region 每天21点-23点,每隔2分钟的第5秒开始执行
            //ITrigger trigger = TriggerBuilder.Create()
            //    .WithIdentity("trigger", "group1")
            //    .WithCronSchedule("5 0/2 21-23 * * ?")
            //    .Build();
            //#endregion

            //#region 每天21:33执行
            //ITrigger trigger = TriggerBuilder.Create()
            //    .WithIdentity("trigger", "group1")
            //    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(21,33))
            //    .Build();
            //#endregion

            #region 每周五21:36执行
            //ITrigger trigger = TriggerBuilder.Create()
            //    .WithIdentity("trigger", "group1")
            //    .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Friday,21,36))
            //    .Build();

            //ITrigger trigger = TriggerBuilder.Create()
            //    .WithIdentity("trigger", "group1")
            //    .WithCronSchedule("0 39 21 ? * FRI")
            //    .Build();
            #endregion

            #region 简单触发器,每隔5秒重复执行
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger", "group1")
                .WithSimpleSchedule(x=>x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
                .Build();
            #endregion

            await scheduler.ScheduleJob(job, trigger);

            Console.WriteLine("Press any key to close the application");
            Console.ReadKey();
        }
    }
}

官方学习文档:Cron Triggers | Quartz.NET

相关推荐
呆萌哈士奇1 天前
告别 throw exception!为什么 Result<T> 才是业务逻辑的正确选择
c#·.net
喵叔哟2 天前
66.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--自动记账
微服务·架构·.net
故事不长丨3 天前
C#log4net详解:从入门到精通,配置、实战与框架对比
c#·.net·wpf·log4net·日志·winform·日志系统
bjzhang753 天前
OneAuthCenter——一款基于 .NET打造的企业级 OAuth 2.0 / OpenID Connect 认证中心
.net·认证中心
步步为营DotNet3 天前
深度解析.NET 中Nullable<T>:灵活处理可能为空值的类型
java·前端·.net
csdn_aspnet3 天前
.NET 10 中的 ASP.NET Core:Blazor、API 和 OpenAPI 的重大更新
后端·asp.net·.net·.net10
weixin_421994784 天前
认识数据 - 变量与数据类型
c#·.net·.netcore
mudtools4 天前
深入理解飞书 Webhook 签名验证:一次踩坑到填坑的完整记录
网络·c#·.net·飞书
工业甲酰苯胺4 天前
如何一步步将 ASP.NET MVC 升级为.NET
asp.net·mvc·.net
闻缺陷则喜何志丹4 天前
【.NetAPI]统计标注的值、上公差、下公差
数学·.net·cad·netapi