平日在品种中境遇定期职务的时候,平时第叁个想到的是Timer计时器,可是那东西作用太弱鸡,实际上平时选用的是职业化的第二方调节框架,比如说

使用config格局灵活布署我们的Quarz.net中的Job,Trigger,quarz.nettrigger

  平日在类型中相遇定时任务的时候,常常第一个想到的是Timer电磁打点计时器,不过那玩意儿成效太弱鸡,实际上平常接纳的是专门的职业化的第三方调节框架,举例说

Quartz,它具有功用强大和平运动用的左右逢源,小编想使用过的人都十三分通晓,那么本篇就来讲说什么样通过代码和布局文件来进展job和trigger的配置。

 

一:常规的job,trigger配置形式

   
这种健康的法子也是大家初阶学习Quartz起始精晓到的,即经过JobBuilder和TriggerBuilder来链式一个IJobDetail和ISimpleTrigger,比方下边的代码。

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 6 
 7             scheduler.Start();
 8 
 9             var job = JobBuilder.Create<HelloJob>().Build();
10 
11             var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1)
12                                                                             .RepeatForever())
13                                                  .StartNow()
14                                                  .Build();
15 
16             scheduler.ScheduleJob(job, trigger);
17 
18             Console.Read();
19         }
20     }

   

   
 上面这段代码能够见到,在BuildJob的时候,使用提供的HelloJob作为当前的定期调解的职务,下边包车型大巴ISimpleTrigger的意趣就是每壹分钟实施二遍HelloJob,

仅此而已,然后正是HelloJob的现实定义,非常轻巧,达成多个IJob接口。

1     public class HelloJob : IJob
2     {
3         private string name = string.Empty;
4         public void Execute(IJobExecutionContext context)
5         {
6             Console.WriteLine("当前时间: {0} ", DateTime.Now);
7         }
8     }

 

   
然后得以把程序跑起来,看看最终的3个结果,能够看看每分钟都有多个数目输出:

必发88官网 1

 

   
 这种艺术相似很周到,可是也可以有二个不利点,今后必要有变动,作者索要将WithIntervalInSeconds(1)
改成WithIntervalInSeconds(二),约等于每秒施行

一遍改成每两秒推行2回,这一个就高烧了,你不得不面临改1回供给,就供给编写翻译二遍再发布,那样的伤筋动骨,笔者想你也相当小愿意呢?面临这种要求必然是

有法子的,不信的话,你可今后下看。

 

二:在quartz_jobs.xml定义job和trigger

   
下面这种硬编码带来的害处作者也跟大家讲到了,接下去看看哪些运用xml配置job和trigger,当大家从nuget中拿走quartz框架的时候,应该都会意识你的

缓和方案中多了贰个xsd文件,不过只怕有很五个人并不知道那一个xsd文件到底是用来干嘛的。。。。其实就是用来写xml时做代码提示用的,好了,上面笔者就1

步步的来得给大家。

 

一.
从nuget下载文件,没什么好说的,在“引用”上右击鼠标,选取“管理NuGet程序包”看下图:

必发88官网 2

必发88官网 3

 

接下来你会看到多了2个job_scheduling_data_2_0.xsd文件。

必发88官网 4

 

  1.  接下来新建2个quartz_jobs.xml文件,然后选中visual
    studio中的xml菜单栏,选中“架构”菜单项。

必发88官网 5

 

三.
在弹出的对话框中,采纳“增添”开关,找到从nuget中变化的job_scheduling_data_2_0.xsd,然后点击达成。必发88官网 6

 

4.
然后就足以在xml中任性的编码,你会发现有关job和trigger的代码有提示了。。。那十分的大的升高了大家的支付

    效率,对吧。

必发88官网 7必发88官网 8

 

好了,上面贴出完整的xml案例,从xml中山大学约也能看得出来,在schedule中定义了2个job和trigger,在job-type节点中定义了须求实践job的命名空间和类名,

稍稍意思吧,也是最终schedule须要调整的职分。

<?xml version="1.0" encoding="utf-8" ?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData">
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>

  <schedule>
    <job>
      <name>sampleJob</name>
      <group>sampleGroup</group>
      <description>Sample job for Quartz Server</description>
      <job-type>ConsoleApplication5.HelloJob,ConsoleApplication5</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
      <simple>
        <name>sampleSimpleTrigger</name>
        <group>sampleSimpleGroup</group>
        <description>Simple trigger to simply fire sample job</description>
        <job-name>sampleJob</job-name>
        <job-group>sampleGroup</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <repeat-count>-1</repeat-count>
        <repeat-interval>1000</repeat-interval>
      </simple>
    </trigger>
  </schedule>
</job-scheduling-data>

 

5.
job的布局文件基本上算是解决了,然后配置Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin类来拍卖

这一个xml文件,同时钦点下quartz_jobs.xml的路子,如下所示:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
 6                 {
 7                     {"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" },
 8                     {"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"}
 9                 });
10 
11             IScheduler scheduler = factory.GetScheduler();
12 
13             scheduler.Start();
14         }
15     }

 

好了,基本上就这么计划停止了,最终一点要注意的正是安排一下quartz_jobs.xml始终复制到bin文件下,如图:

必发88官网 9

 

终极跑一下源代码看看,效果怎么着,看到未有,是还是不是很牛逼。

必发88官网 10

 

好了,今后是否发现你的八面驶风有非常的大拉长了,若是将一s改成2s,我只供给把quartz_jobs.xml中的<repeat-interval>1000</repeat-interval>,改成

<repeat-interval>3000</repeat-interval>就可是做到对trigger的动态配置,是否很酷。

必发88官网 11

 

最后附完整案例:ConsoleApplication五.zip

 

平常在品种中遇见定期职务的时候,平时第3个想到的是Timer停车计时器,然则…

Quartz,它具备功效强大和采取的狡滑,小编想使用过的人都万分驾驭,那么本篇就来讲说怎样通过代码和安插文件来进展job和trigger的陈设。

 

壹:常规的job,trigger配置格局

   
这种健康的方法也是我们初叶学习Quartz初始驾驭到的,即透过JobBuilder和TriggerBuilder来链式七个IJobDetail和ISimpleTrigger,举个例子下边包车型客车代码。

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 6 
 7             scheduler.Start();
 8 
 9             var job = JobBuilder.Create<HelloJob>().Build();
10 
11             var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1)
12                                                                             .RepeatForever())
13                                                  .StartNow()
14                                                  .Build();
15 
16             scheduler.ScheduleJob(job, trigger);
17 
18             Console.Read();
19         }
20     }

   

   
 上边这段代码能够观望,在BuildJob的时候,使用提供的HelloJob作为当前的按时调节的职分,上面包车型地铁ISimpleTrigger的意趣正是每一分钟试行2次HelloJob,

仅此而已,然后就是HelloJob的切实可行定义,非常轻便,达成一个IJob接口。

1     public class HelloJob : IJob
2     {
3         private string name = string.Empty;
4         public void Execute(IJobExecutionContext context)
5         {
6             Console.WriteLine("当前时间: {0} ", DateTime.Now);
7         }
8     }

 

   
然后方可把程序跑起来,看看最后的贰个结果,可以看看每分钟都有三个数目输出:

必发88官网 12

 

   
 这种方法一般很圆满,不过也是有三个不利点,未来须要有变动,笔者索要将WithIntervalInSeconds(一)
改成WithIntervalInSeconds(二),也正是每秒推行

3次改成每两秒实行1次,那几个就头痛了,你不得不面前境遇改一遍必要,就供给编写翻译一回再宣布,这样的伤筋动骨,小编想你也比比较小愿意呢?面临这种必要必然是

有主意的,不信的话,你可今后下看。

 

二:在quartz_jobs.xml定义job和trigger

   
下面这种硬编码带来的坏处小编也跟大家讲到了,接下去看看哪些运用xml配置job和trigger,当大家从nuget中获取quartz框架的时候,应该都会意识你的

缓和方案中多了一个xsd文件,不过可能有数不清个人并不知道那些xsd文件到底是用来干嘛的。。。。其实便是用来写xml时做代码提醒用的,好了,下边小编就壹

步步的来得给大家。

 

壹.
从nuget下载文件,没什么好说的,在“引用”上右击鼠标,选取“管理NuGet程序包”看下图:

必发88官网 13

必发88官网 14

 

然后您会看到多了三个job_scheduling_data_2_0.xsd文件。

必发88官网 15

 

贰.
 接下来新建二个quartz_jobs.xml文件,然后选中visual
studio中的xml菜单栏,选中“框架结构”菜单项。

必发88官网 16

 

3.
在弹出的对话框中,选拔“增多”按键,找到从nuget中变化的job_scheduling_data_2_0.xsd,然后点击完结。必发88官网 17

 

4.
然后就足以在xml中自由的编码,你会意识有关job和trigger的代码有提醒了。。。那巨大的增进了大家的开销

    效率,对吧。

必发88官网 18必发88官网 19

 

好了,下边贴出完整的xml案例,从xml中山高校约也能看得出来,在schedule中定义了2个job和trigger,在job-type节点中定义了亟待进行job的命名空间和类名,

稍微意思啊,也是最终schedule须要调治的职务。

<?xml version="1.0" encoding="utf-8" ?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData">
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>

  <schedule>
    <job>
      <name>sampleJob</name>
      <group>sampleGroup</group>
      <description>Sample job for Quartz Server</description>
      <job-type>ConsoleApplication5.HelloJob,ConsoleApplication5</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <trigger>
      <simple>
        <name>sampleSimpleTrigger</name>
        <group>sampleSimpleGroup</group>
        <description>Simple trigger to simply fire sample job</description>
        <job-name>sampleJob</job-name>
        <job-group>sampleGroup</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <repeat-count>-1</repeat-count>
        <repeat-interval>1000</repeat-interval>
      </simple>
    </trigger>
  </schedule>
</job-scheduling-data>

 

5.
job的安顿文件基本上算是解决了,然后配置Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin类来管理

本条xml文件,同时钦赐下quartz_jobs.xml的路线,如下所示:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
 6                 {
 7                     {"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" },
 8                     {"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"}
 9                 });
10 
11             IScheduler scheduler = factory.GetScheduler();
12 
13             scheduler.Start();
14         }
15     }

 

好了,基本上就如此安插甘休了,最终一点要小心的正是布局一下quartz_jobs.xml始终复制到bin文件下,如图:

必发88官网 20

 

聊到底跑一下源代码看看,效果怎么着,看到未有,是否很牛逼。

必发88官网 21

 

好了,今后是或不是意识你的灵活性有相当大加强了,假若将一s改成2s,小编只需求把quartz_jobs.xml中的<repeat-interval>1000</repeat-interval>,改成

<repeat-interval>两千</repeat-interval>就可是做到对trigger的动态配置,是否很酷。

必发88官网 22

 

终极附完整案例:ConsoleApplication5.zip

 

相关文章