导航

Quartz.NET快速入门指南

Posted on 2019-11-30 10:51  WinChance  阅读(233)  评论(0编辑  收藏  举报

Quartz.NET 简介

Quartz.NET是一个用C#编写的基于.NetCore的纯.Net库,是一个非常流行的开源Java作业调度框架Quartz的.Net版本。这个项目很大程度上归功于原始的Java项目。此项目已更新到3.0+版本,也是博主学习使用的版本。官方文档

Quartz.NET 快速入门

Quartz.NET 关键接口和类

  • IScheduler : - 与调度程序交互的主要API。
  • IJob - 由您希望由调度程序执行的组件实现的接口。
  • IJobDetail - 用于定义Jobs的实例。
  • ITrigger - 一个触发器,用于定义执行给定作业的计划。
  • JobBuilder - 用于定义/构建JobDetail实例,用于定义Jobs的实例。
  • TriggerBuilder - 用于定义/构建触发器实例。

示例应用程序

using Quartz.Impl;
using Quartz.Logging;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Quartz
{
    public class Program
    {
        private static void Main(string[] args)
        {
            // 设置日志提供者
            LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());

            RunProgramRunExample().GetAwaiter().GetResult();

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

        private static async Task RunProgramRunExample()
        {
            try
            {
                // 第一步:从工厂中获取Scheduler实例
                NameValueCollection props = new NameValueCollection{
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                IScheduler scheduler = await factory.GetScheduler();


                // 第二步:然后运行它
                await scheduler.Start();

                // 第三步:定义作业并绑定到HelloJob类,HelloJob类继承IJob接口
                IJobDetail job = JobBuilder.Create<HelloJob>()
                    .WithIdentity("job1", "group1")
                    .Build();

                // 第四步:创建触发器。设定,每十秒执行一次作业。永远重复。
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1") //指定唯一标识,触发器名字,和组名字,这对于将作业和触发器组织成“报告作业”和“维护作业”等类别非常有用。
                    .StartNow() //作业或触发器的键的名称部分在组内必须是唯一的
                    .WithSimpleSchedule(x => x //从现在开始执行
                        .WithIntervalInSeconds(10) //每十秒执行一次
                        .RepeatForever()) //永远重复
                    .Build();

                // 第五步:作业与触发器组合,安排任务
                await scheduler.ScheduleJob(job, trigger);

                // 延时
                await Task.Delay(TimeSpan.FromSeconds(60));

                // 可以设置关闭该调度
                //await scheduler.Shutdown();
            }
            catch (SchedulerException se)
            {
                Console.WriteLine(se);
            }
        }

        // 向控制台输出日志
        private class ConsoleLogProvider : ILogProvider
        {
            public Logger GetLogger(string name)
            {
                return (level, func, exception, parameters) =>
                {
                    if (level >= LogLevel.Info && func != null)
                    {
                        Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] " + func(), parameters);
                    }
                    return true;
                };
            }

            public IDisposable OpenNestedContext(string message)
            {
                throw new NotImplementedException();
            }

            public IDisposable OpenMappedContext(string key, string value)
            {
                throw new NotImplementedException();
            }
        }
    }

    public class HelloJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync("欢迎使用Quartz.NET!!");
        }
    }
}

 

参考:

1、https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html

2、https://www.cnblogs.com/lonelyxmas/p/11789938.html