第二节:调度器,触发器与作业


调度器

Quartz.Net中核心的地方就调度器,调度器负责管理Quartz.NET应用运行时环境。

上一节中代码中IScheduler sched = sf.GetScheduler(); 这一句代码看起来简单,其实背后做了好多事情,比如:初始化配置,是使用数据库还是内存,初始化线程池,是否是远程执行job等等,总之挺复杂的。

作业:

目前我的理解就是job,类似于上一节中自定义的MyJob

触发器:

用来告诉调度器作业什么时候触发.

解发器分为:SimpleTriggerImpl,CronTriggerImpl,DailyTimeIntervalTriggerImpl

具体的代码表现就是继承ITrigger这个接口。

如果只是简单的调度作业,比如每隔一小时执行一次哪么简单调度器(SimpleTriggerImpl)完全适合你,

如果您想指定工作日的每天的早上9点执行一个任务,复杂排程调度器(CronTriggerImpl)更为合适大家

 

复杂排程调度器采用Calendar-like表达式,

具体见:点我打表达式

 

例子

比如用复杂排程调度器写一个每天每天下午的 6点到6点59分每隔5s就触发一次的例子

1.雷同上一节的job:

     public class MyJob : IJob

     {

            publicvoid Execute(IJobExecutionContextcontext)

            {

                Console.WriteLine("我执行了,时间:{0}", DateTime.Now);

            }

      } 


 

2.雷同上一节的main函数:

 

static void Main(string[] args)

{

            //调度器

            ISchedulerFactorysf = new StdSchedulerFactory();

            ISchedulersched = sf.GetScheduler();

 

            //job详情,注意MyJob

            IJobDetailmyJob = JobBuilder.Create<MyJob>()

               .WithIdentity("job1", "group1")

               .Build();

 

            //触发器

            ITriggertrigger = TriggerBuilder.Create()

                .WithIdentity("trigger1", "group1")

                .WithCronSchedule("0/5 * 18 * * ? ")//这里用的复杂排程调度器

                .Build();

 

            //关联job和触发器

            sched.ScheduleJob(myJob, trigger);

 

            //执行

            sched.Start();

 

            Console.Read();

 

            //关掉

            sched.Shutdown(true);

 }


 

3.不一样上一节的运行结果:

                             

 

结语:下载下来Quartz.Net的例子,发现Quartz实在是太实用了,有简单的任务,有状态job,可以执行远程的job,而且配置也很强大,忍不住想往下学……

 

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using Quartz.Impl;

namespace Quartz.Demo
{
    class MyClass
    {
        static void Main(string[] args)
        {
            //调度器
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler();

            //job详情,注意MyJob
            IJobDetail myJob = JobBuilder.Create<MyJob>()
               .WithIdentity("job1", "group1")
               .Build();

            //触发器
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .WithCronSchedule("0/5 * 18 * * ? ")
                .Build();

            //关联job和触发器
            sched.ScheduleJob(myJob, trigger);

            //执行
            sched.Start();

            Console.Read();

            //关掉
            sched.Shutdown(true);
        }

        public class MyJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                Console.WriteLine("我执行了,时间:{0}", DateTime.Now);
            }
        }
    }
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值