一、下载并安装
您可以下载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());
}
}
}
}
共有条评论 网友评论