开发手册 欢迎您!
软件开发者资料库

.NET Core Quartz使用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().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