第八节:触发器

第八节:触发器

上节中学到了quartz 如何解析corn-like 表达式,其实触发器中最核心的地方就是处理时间,

这一节让我们来了解下quartz中的触发器有哪些吧:

 

我想大家一定首先想到的就是处理corn-like的触发器吧,它就是CronTriggerImpl触发器,还是看一下类图,看看有多少触发器,和它们之间的关系吧

 

 

如上图,所有的触发器继承了ITrigger接口和AbstractTrigger这个抽象类,类图稍微有点乱,但大概也能看清它们的关系。

正如我们看到的,我们罗列一下上图的触发器吧:

 

CronTriggerImpl                          使用corn-like表达式的一个触发器,触发时机比较容易定制

CalendarIntervalTriggerImpl        根据日历的时间间隔重复执行的一个触发器

DailyTimeIntervalTriggerImpl      根据每天重复的时间间隔

SimpleTriggerImpl                       简单的触发器,比如只执行一次这样的

 

 

我们稍微看一下ITrigger这个接口,就会发现TriggerKey相当于触发器的一个主键,唯一标识一个触发器,并且一个触发器关联一个JobKey(相当于作业主键),比如还有GetNextFireTimeUtc()这样类似的接口方法,这个方法应该是得到下一次执行作业的时间。也就是一个触发器对应一个作业。

 

 

我们在用quartz的时候,对实例化上面哪些触发器是不可见的,是由TriggerBuilder这个类完成的。

可以看一下这些Builder类的结构是怎么的,如下图:

 

很明显一个触发器对应一个builder了。

 

下面我们就简单的SimpleScheduleBuilder来完成一个例子吧:

 

1:job代码:很简单输出当前时间

 

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


2:调度代码:

 

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

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

            //触发器,用的简单触发器,每隔5秒执行一次
            ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))
                .WithIdentity("t1")
                .Build();

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

            //执行
            sched.Start();

            Console.Read();

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


3:执行结果 间隔5s执行:

 

 

 

总结:认识了quartz中的触发器

 

 

 

全部代码:

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

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

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

            //触发器,用的简单触发器,每隔5秒执行一次
            ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(t => t.RepeatForever().WithIntervalInSeconds(5))
                .WithIdentity("t1")
                .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);
        }
    }
}


 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值