文章
当前位置:首页  > Quartz > Quartz开发教程 > 正文

001、快速入门

admin    发布于 2018-6-27 10:45:11   浏览()   评论()   收藏(0)

一、下载并安装

您可以下载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目录中,配置将不会被看到。

由此配置创建的调度程序具有以下特征:

18.png

其实你不需要定义这些属性,如果你不想,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());
            }
        }
    }
}


附件下载

上一篇: 没有了
下一篇: 002、工作和触发器(Jobs And Triggers)

共有条评论 网友评论

验证码: 看不清楚?
    品互网络   版权所有 Copyright © 2018 All Rights Reserved     苏ICP备11033012号-2    留言    订阅