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