一、什么叫Quartz.NET

Quartz.NET 是一个功能完善的开源系统工作智能监控系统,可用以从最少的应用软件到知名企业系统软件

Quartz.NET是纯粹的,它是一个.Net程序流程集,是十分时兴的Java工作智能监控系统Quartz的C#完成。

二、Quartz.NET可以做什么?

Quartz.NET许多 特点,如:数据库查询适用,群集,软件,适用cron-like关系式这些,特别适合在平常的工作上,按时轮循数据库同步,按时电子邮件通告,按时解决数据信息等。

Quartz.NET容许开发者依据间隔时间(或天)来生产调度工作。它完成了工作和触发器原理的多对多关联,还可以把好几个工作与不一样的触发器原理关系。

Quartz.NET的应用软件能够器重来源于不一样事情的工作,还能够为一个事情组成好几个工作。

我本次挑选Quartz.Net应用的版本号是 3.3.3

这儿注重一点:3.x的版本号与2.x的版本号应用方法有一定的区别

Quartz.NET官方网文本文档:https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html

三、ASP.NET Core怎么使用Quartz.NET?

  1. 最先大家必须建立一个ASP.NET Core Web的新项目,建立的全过程也不展现了,我建立的是API新项目,应用传统式三层架构
    ASP.NETCore最初使用Quartz.NET插图
  2. 新项目建立好后,大家必须在NuGet包管理工具中安裝Quartz.AspNetCoreQuartz.Extensions.DependencyInjection
    ASP.NETCore最初使用Quartz.NET插图1ASP.NETCore最初使用Quartz.NET插图2
  3. 与2.x的应用方法不一样,由于我应用的版本号是3.3.3(这时最新版)。大家也不像传统式的建立调度系统类。传统式的是界定工作加工厂类【ResetjobFactory】,监测中心类【SchedulerCenter】,及其按时工作中类【RegularWork】(如下图)在这里就但是多详细介绍了。ASP.NETCore最初使用Quartz.NET插图3
  4. 只需建立一个按时工作中类【RegularWork】,而且承继Quartz.net的IJob插口,I_RegularWork_BLL 能引入到RegularWork内必须UseMicrosoftDependencyInjectionJobFactory.
       public class RegularWork : IJob
        {
    
        private readonly I_RegularWork_BLL I_bll;
        public RegularWork(I_RegularWork_BLL Ibll)
        {
            I_bll = Ibll;
        }
    
        public Task Execute(IJobExecutionContext context)
        {
            Input_RoomType model = new Input_RoomType();
            model.currentPage = 1;
            model.pageSize = 1;
            var result = I_bll.getRoomTypeList(model);
    
            return Task.Run(() =>
            {
                using (StreamWriter sw = new StreamWriter(@"F:/Quartz-NET.txt", true, Encoding.UTF8))
                {
                   sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff =>")   JsonConvert.SerializeObject(result));
                }
            });
        }
    }
    
  5. Startup.csConfigureServices方式 内根据services去申请注册RegularWork
               //Quartz的工作中模块
                services.AddTransient<RegularWork>();
    
  6. ConfigureServices方式 内增加Quartz调度系统。Quartz.Extensions.DependencyInjection给予与Microsoft 依赖注入的集成化,尽管Quartz 为工作加工厂给予了2个内嵌取代计划方案,能够根据启用UseMicrosoftDependencyInjectionJobFactory或UseMicrosoftDependencyInjectionScopedJobFactory(已弃用)开展配备。

    从 Quartz.NET 3.3.2 逐渐,默认设置工作加工厂转化成的全部工作全是修饰符工作,不可再应用UseMicrosoftDependencyInjectionScopedJobFactory。

    AddJob-增加一个工作中模块;StartNow表明工作如今就逐渐实行;

    WithInterval用以实行時间对策实行标准;

    TimeSpan.FromSeconds表明实行的间隔时间,秒为企业;RepeatForever意味着反复工作中,可以用WithRepeatCount(5)替代RepeatForever;WithRepeatCount(5)意味着实行5次

              //Quartz调度系统
                services.AddQuartz(q =>
                {
                    //用以引入
                    q.UseMicrosoftDependencyInjectionJobFactory();
                    // 基本上Quartz生产调度器、工作和触发器原理配备
                    var jobKey = new JobKey("RegularWork", "regularWorkGroup");
                    q.AddJob<RegularWork>(jobKey, j => j
                        .WithDescription("My regular work")
                    );
                    q.AddTrigger(t => t
                        .WithIdentity("Trigger")
                        .ForJob(jobKey)          .StartNow()
                        .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//逐渐分秒 10s
                        .RepeatForever())//不断工作中
                        .WithDescription("My regular work trigger")
                    );
    
            });            
    
  7. ConfigureServices方式 内增加加上Quartz服务项目
               // ASP.NET关键代管-加上Quartz网络服务器
                services.AddQuartzserver(options =>
                {
                    // 关掉时,大家期待工作一切正常进行
                    options.WaitForJobsToComplete = false;
                });
    

    详细编码以下

                //Quartz的工作中模块
                services.AddTransient();
                //Quartz调度系统
                services.AddQuartz(q =>
                {
                    //用以引入
                    q.UseMicrosoftDependencyInjectionJobFactory();
                    // 基本上Quartz生产调度器、工作和触发器原理配备
                    var jobKey = new JobKey("RegularWork", "regularWorkGroup");
                    q.AddJob(jobKey, j => j
                        .WithDescription("My regular work")
                    );
                    q.AddTrigger(t => t
                        .WithIdentity("Trigger")
                        .ForJob(jobKey)
                        .StartNow()
                        .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//逐渐分秒 10s
                        .WithRepeatCount(5))//不断工作中
                        .WithDescription("My regular work trigger")
                    );
    
            });
            // ASP.NET关键代管-加上Quartz服务项目
            services.AddQuartzServer(options =>
            {
                // 关掉时,大家期待工作一切正常进行
                options.WaitForJobsToComplete = false;
            });
    

    ASP.NETCore最初使用Quartz.NET插图4

  8.  此刻大家运行新项目,按时工作中逐渐实行。此刻的引入是合理的,查看数据信息后結果打印出在F盘下的Quartz-NET.txt文档内(如下图)。

    ASP.NETCore最初使用Quartz.NET插图5

四、Quartz的cron关系式

官方网的文本文档详细介绍:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html#fORMat

由7段组成:秒 分 时 日 月 礼拜 年(可选)
“-” :表明范畴  MON-WED表明星期一到星期三
“,” :表明例举 MON,WEB表明星期一和星期三
“*” :表有“每”,每月,每日,每星期,每一年等
“/” :表明增加量:0/15(处在分鐘段里边) 每15分钟,在0分之后逐渐,3/20 每二十分钟,从3分钟之后逐渐
“?” :只有发生在日,礼拜段里边,表明不特定实际的值
“L” :只有发生在日,礼拜段里边,是Last的简称,一个月的最后一天,一个星期的最后一天(星期六)
“W” :表明工作中日,间距给出值近期的工作中日
“#” :表明一个月的几个星期几,比如:”6#3″表明每一个月的第三个星期五(1=SUN…6=FRI,7=SAT)

Expression Meaning
0 0 12 * * ? 每日下午12点开启
0 15 10 ? * * 每日早上10:15开启
0 15 10 * * ? 每日早上10:15开启
0 15 10 * * ? * 每日早上10:15开启
0 15 10 * * ? 2005 2005年的每日早上10:15开启
0 * 14 * * ? 在每日中午2点至中午2:59期内的每1分钟开启
0 0/5 14 * * ? 在每日中午2点至中午2:55期内的每五分钟开启
0 0/5 14,18 * * ? 在每日中午2点至2:55期内和中午六点到6:55期内的每五分钟开启
0 0-5 14 * * ? 在每日中午2点至中午2:05期内的每1分钟开启
0 10,44 14 ? 3 WED 每一年三月的星期三的中午2:10和2:44开启
0 15 10 ? * MON-FRI 周一至周五的早上10:15开启
0 15 10 15 * ? 每月15日早上10:15开启
0 15 10 L * ? 每月最后一日的早上10:15开启
0 15 10 L-2 * ? Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L 每月的最后一个星期五早上10:15开启
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五早上10:15开启
0 15 10 ? * 6#3 每月的第三个星期五早上10:15开启
0 0 12 1/5 * ? Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ? Fire every November 11th at 11:11am.