一、下载并安装
您可以下载zip文件或使用NuGet软件包。NuGet包只包含运行Quartz.NET所需的二进制文件,zip文件附带源代码,示例和Quartz.NET服务器示例应用程序。
Zip档案
简版:下载Quartz.NET后,将其解压到某处,从bin目录中获取Quartz.dll并开始使用它。
Quartz核心库没有任何硬二进制依赖关系。如果您选择使用JSON序列化包(需要JSON.NET),则可以选择加入更多的依赖关系。您需要在应用程序二进制文件旁至少有Quartz.dll才能成功运行Quartz.NET。因此,只需将其添加为使用它们的Visual Studio项目的引用即可。您可以从路径bin \ your-target-framework-version \ release \ Quartz中解压缩的归档文件中找到这些dll 。
NuGet包
没有比这更简单的了。只需启动Visual Studio(安装了NuGet)并从包管理器扩展中添加对Quartz包的引用:
右键单击项目的参考并选择管理NuGet软件包...
从左侧选择在线类别
输入石英到右上角搜索并按回车
从搜索结果中选择Quartz.NET并点击安装
完成!
二、Configuration
这个配置比较重要!Quartz.NET是一个非常可配置的库。有三种方式(不相互排斥)提供Quartz.NET配置信息:
以编程方式通过向调度器工厂提供NameValueCollection参数
通过使用quartz-element的标准youapp.exe.config配置文件(仅适用于完整的.NET框架)
您的应用程序根目录中的quartz.config文件(与.NET Core和完整的.NET Framework一起使用)
要快速启动并运行,基本的quartz.config如下所示:
quartz.scheduler.instanceName = MyScheduler quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz quartz.threadPool.threadCount = 3
在Visual Studio的文件属性页上将Copy to Output Directory设置为始终具有值Copy。否则,如果配置不在build目录中,配置将不会被看到。
由此配置创建的调度程序具有以下特征:

其实你不需要定义这些属性,如果你不想,Quartz.NET自带默认值
三、启动应用程序
现在您已经下载并安装Quartz,现在是时候让示例应用程序启动并运行了。以下代码获取调度程序的实例,启动它,然后关闭它:
Program.cs中
1、日志
using Quartz.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1
{
   
  public 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();
        }
    }
}2、job
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo1
{
  public  class HelloJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync("Greetings from HelloJob!");
        }
    }
}3、完整代码
using Quartz;
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 Demo1
{
    class Program
    {
        static void Main(string[] args)
        {
            LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());
            // trigger async evaluation
            RunProgram().GetAwaiter().GetResult();
            Console.WriteLine("Press any key to close the application");
            Console.ReadKey();
        }
        private static async Task RunProgram()
        {
            try
            {
                // Grab the Scheduler instance from the Factory
                //从工厂中获取调度程序实例
                NameValueCollection props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                IScheduler scheduler = await factory.GetScheduler();
                //and start it off
                // 然后调度开始
                await scheduler.Start();
                // define the job and tie it to our HelloJob class
                //定义这个工作并将其与我们的HelloJob类联系起来
                IJobDetail job = JobBuilder.Create<HelloJob>()
                    .WithIdentity("job1", "group1")
                    .Build();
                // Trigger the job to run now, and then repeat every 10 seconds
                //触发作业立即运行,然后每10秒重复一次
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(x => x
                        .WithIntervalInSeconds(10)
                        .RepeatForever())
                    .Build();
                // Tell quartz to schedule the job using our trigger
                //告诉quartz的调度schedule 哪个工作用了我们哪个触发器
                await scheduler.ScheduleJob(job, trigger);
        
                // some sleep to show what's happening
                //等待1分钟后看看会发生什么?
                await Task.Delay(TimeSpan.FromSeconds(60));
                // and last shut down the scheduler when you are ready to close your program
                //当你的应用程序准备关闭的时候关掉调度程序
                await scheduler.Shutdown();
            }
            catch (SchedulerException se)
            {
                await Console.Error.WriteLineAsync(se.ToString());
            }
        }
    }
}
共有条评论 网友评论