公司网站建设的不足,网站开发有哪些服务器,小型私人会所装修设计,网站织梦程序改成wordpress经常在项目中遇到定时任务的时候#xff0c;通常第一个想到的是Timer定时器#xff0c;但是这玩意功能太弱鸡#xff0c;实际上通常采用的是专业化的第三方调度框架#xff0c;比如说Quartz#xff0c;它具有功能强大和应用的灵活性#xff0c;我想使用过的人都非常了解通常第一个想到的是Timer定时器但是这玩意功能太弱鸡实际上通常采用的是专业化的第三方调度框架比如说Quartz它具有功能强大和应用的灵活性我想使用过的人都非常了解那么本篇就来说说如何通过代码和配置文件来进行job和trigger的配置。一常规的jobtrigger配置方式这种常规的方式也是我们初步学习Quartz最先了解到的即通过 JobBuilder 和 TriggerBuilder 来链式一个IJobDetail和ISimpleTrigger比如下面的代码。class Program{static void Main(string[] args){IScheduler scheduler StdSchedulerFactory.GetDefaultScheduler();scheduler.Start();var job JobBuilder.CreateHelloJob().Build();var trigger TriggerBuilder.Create().WithSimpleSchedule(m m.WithIntervalInSeconds(1).RepeatForever()).StartNow().Build();scheduler.ScheduleJob(job, trigger);Console.Read();}}
上面这段代码可以看出在BuildJob的时候使用提供的 HelloJob 作为当前的定时调度的任务下面的ISimpleTrigger的意思就是每一秒钟执行一次HelloJob仅此而已然后就是HelloJob的具体定义非常简单实现一个IJob接口。public class HelloJob : IJob{private string name string.Empty;public void Execute(IJobExecutionContext context){Console.WriteLine(当前时间: {0} , DateTime.Now);}}
接下来可以把程序跑起来看看最后的一个结果可以看到每秒钟都有一个数据输出这种方式貌似很完美但是也有一个不利点现在需求有变更我需要将WithIntervalInSeconds(1) 改成WithIntervalInSeconds(2),也就是每秒执行一次改成每两秒执行一次这个就头疼了你不得不面对改一次需求就需要编译一次再发布这样的伤筋动骨我想你也不大愿意吧这种需求肯定是有办法的不信的话你可以往下看。二在quartz_jobs.xml定义job和trigger上面这种硬编码带来的坏处我也跟大家讲到了接下来看看如何使用xml配置job和trigger当我们从nuget中获取quartz框架的时候应该都会发现你的解决方案中多了一个xsd文件可能有很多人并不知道这个xsd文件到底是用来干嘛的。。。。其实就是用来写xml时做代码提示用的好了下面我就一步步的展示给大家。从nuget下载文件没什么好说的在“引用”上右击鼠标选择“管理NuGet程序包”看下图:然后你会看到多了一个job_scheduling_data_2_0.xsd文件。接下来新建一个quartz_jobs.xml文件然后选中visual studio中的xml菜单栏选中“架构”菜单项。在弹出的对话框中选择“添加”按钮找到从nuget中生成的job_scheduling_data_2_0.xsd然后点击完成。然后就可以在xml中自由的编码你会发现关于job和trigger的代码有提示了。。。这极大的提高了我们的开发效率对吧。好了下面贴出完整的xml案例从xml中大概也能看得出来在schedule中定义了一个job和trigger在job-type节点中定义了需要执行job的命名空间和类名有点意思吧也是最终schedule需要调度的任务。
?xml version1.0 encodingutf-8 ?
job-scheduling-data xmlnshttp://quartznet.sourceforge.net/JobSchedulingDataprocessing-directivesoverwrite-existing-datatrue/overwrite-existing-data/processing-directivesschedulejobnamesampleJob/namegroupsampleGroup/groupdescriptionSample job for Quartz Server/descriptionjob-typeConsoleApplication5.HelloJob,ConsoleApplication5/job-typedurabletrue/durablerecoverfalse/recover/jobtriggersimplenamesampleSimpleTrigger/namegroupsampleSimpleGroup/groupdescriptionSimple trigger to simply fire sample job/descriptionjob-namesampleJob/job-namejob-groupsampleGroup/job-groupmisfire-instructionSmartPolicy/misfire-instructionrepeat-count-1/repeat-countrepeat-interval1000/repeat-interval/simple/trigger/schedule
/job-scheduling-data
job的配置文件基本上算是搞定了然后配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件同时指定下quartz_jobs.xml的路径如下所示class Program{static void Main(string[] args){var factory new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection(){{quartz.plugin.xml.fileNames,~/quartz_jobs.xml },{quartz.plugin.xml.type,Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz}});IScheduler scheduler factory.GetScheduler();scheduler.Start();}}
好了基本上就这样配置结束了最后一点要注意的就是配置一下 quartz_jobs.xml 始终复制到bin文件下,然后跑一下源代码看看效果咋样看到没有是不是很????????。好了如果将1s改成2s我只需要把quartz_jobs.xml中的 1000改成2000 就可是做到对trigger的动态配置如下图