.NET Core Quartz使用cron表达式实现定时任务

.NET Core应用中使用Quartz.NET和cron表达式实现定时任务是一种非常有效的方式来执行周期性的后台任务。.NET Core中通过Quartz实现定时任务,并且使用Cron表达式来配置时间,类似于Linux中的Cron程序。

1、使用Nuget引入Quartz

1)可以在Nuget包管理器中搜索Quartz,找到Quartz点击安装

2)在Nuget包管理控制台使用下面命令安装引入

Install-Package Quartz

3)Quartz中使用的命名空间

using Quartz;  
using Quartz.Impl;

2、实现Quartz中的IJob接口

   [DisallowConcurrentExecutionAttribute]
    public class MessageJob : IJob
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();
        public Task Execute(IJobExecutionContext context)
        {
            //Console.WriteLine("Info From HelloJob");
            //Thread.Sleep(30000);
            //LogHelper.WriteInfo("Info From HelloJob");
            return Task.Run(() =>
            {
                logger.Info("MessageJob Start");
                try
                {
                    
                    Utils.NotifyMsg();
                }
                catch (Exception ex)
                {
                    logger.Error(ex.Message);
                }
            });
        }
    }

3、配置和启动定时任务

namespace MyConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个作业调度池
            ISchedulerFactory schedf = new StdSchedulerFactory();
            IScheduler sched = schedf.GetScheduler().Result;
            //开始运行
            sched.Start();
            //创建出一个具体的作业
            IJobDetail job = JobBuilder.Create<MessageJob>().Build();            //配置一个触发器
                                                                                 //创建出一个具体的作业
            //创建触发器
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .StartNow()
                .WithCronSchedule("30 0/1 * * * ?")//每分钟的第30秒执行 //0 0/32 19-22 * * ?
                .Build();
            //加入作业调度池中
            sched.ScheduleJob(job, trigger).Wait();

        }
    }
}

4、cron表达式

从左到右分别为:秒 分 小时 月份中的日期 月份 星期中的日期 年份 (中间用空格隔开)。其中年份可空。

字段    允许值    允许的特殊字符 

秒       0-59       , - * / 
分       0-59       , - * / 
小时    0-23       , - * / 
日期    1-31        , - * ? / L W C 
月份    1-12        , - * / 
星期     1-7         , - * ? / L C # 
年 (可选)留空, 1970-2099   , - * / 

官方文档https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/index.html

推荐阅读
cjavapy编程之路首页