本文主要介绍.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();            //配置一个触发器
                                                                                 //创建出一个具体的作业
            IJobDetail cacheJob = JobBuilder.Create<CacheJob>().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