Quartz.NET学习系列(二)--- 简单触发器

        Quartz.NET的触发器比较多,但是常用的有两个分别是SimpleTriggerCronTrigger,本篇学习下SimpleTrigger

        SimpleTrigger 的创建方式如下:

ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
                                           .WithIdentity("trigger1", "group1")
                                           .StartAt(startTime)
                                           .Build();
ISimpleTrigger有较多方法,常用的方法有 StartAt(开始时间)  WithSimpleSchedule(执行间隔次数等设置) ForJob(特定的任务触发器)

以下是应用的代码:

        public class SimpleJob : IJob
	{
		private ILog log = LogManager.GetLogger(typeof(SimpleJob));

		public virtual void Execute(IJobExecutionContext context)
		{
			JobKey jobKey = context.JobDetail.Key;
                        log.InfoFormat("任务: {0} 执行时间:{1}", jobKey, DateTime.Now.ToString());
		}
	}

    public class SimpleTriggerExample 
    {
        public static void Run()
        {
            ILog log = LogManager.GetLogger(typeof (SimpleTriggerExample));

            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler();

            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 5);

            //job1在5秒之后运行
            IJobDetail job = JobBuilder.Create<SimpleJob>()
                .WithIdentity("job1", "group1")
                .Build();

            ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
                                                          .WithIdentity("trigger1", "group1")
                                                          .StartAt(startTime)
                                                          .Build();

            DateTimeOffset? ft = sched.ScheduleJob(job, trigger);
            log.Info(job.Key +
                     " 开始时间: " + ft +
                     " 执行次数: " + trigger.RepeatCount +
                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);

            // job2 每1秒执行一次,共执行6次(其中开始1此,重复5次)
            job = JobBuilder.Create<SimpleJob>()
                .WithIdentity("job2", "group1")
                .Build();

            trigger = (ISimpleTrigger) TriggerBuilder.Create()
                                           .WithIdentity("trigger2", "group1")
                                           .StartAt(startTime)
                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(5))
                                           .Build();

            ft = sched.ScheduleJob(job, trigger);
            log.Info(job.Key +
                     " 开始时间: " + ft +
                     " 执行次数: " + trigger.RepeatCount +
                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);

            

            //job2被替换 原来照常执行 组别不一样
            trigger = (ISimpleTrigger) TriggerBuilder.Create()
                                           .WithIdentity("trigger2", "group2")
                                           .StartAt(startTime)
                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(2))
                                           .ForJob(job)
                                           .Build();

            ft = sched.ScheduleJob(trigger);
            log.Info(job.Key +
                     " 开始时间: " + ft +
                     " 执行次数: " + trigger.RepeatCount +
                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);

            // job3 5秒后执行
            job = JobBuilder.Create<SimpleJob>()
                .WithIdentity("job3", "group1")
                .Build();

            trigger = (ISimpleTrigger) TriggerBuilder.Create()
                                           .WithIdentity("trigger3", "group1")
                                           .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))
                                           .Build();

            ft = sched.ScheduleJob(job, trigger);
            log.Info(job.Key +
                     " 开始时间: " + ft +
                     " 执行次数: " + trigger.RepeatCount +
                     " 执行间隔" + trigger.RepeatInterval.TotalSeconds);

            sched.Start();

            log.Info("------- 开始计划 -----------------");

            job = JobBuilder.Create<SimpleJob>()
                .WithIdentity("job5", "group1")
                .Build();

            ISimpleTrigger trigger1 = (ISimpleTrigger)TriggerBuilder.Create()
                                           .WithIdentity("trigger5", "group1")
                                           .StartAt(startTime)
                                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(2))
                                           .Build();

            ft = sched.ScheduleJob(job, trigger1);
            log.Info(job.Key +
                     " 开始时间: " + ft +
                     " 执行次数: " + trigger1.RepeatCount +
                     " 执行间隔" + trigger1.RepeatInterval.TotalSeconds);

            job = JobBuilder.Create<SimpleJob>()
                .WithIdentity("job6", "group1")
                .StoreDurably()
                .Build();

            sched.AddJob(job, true);

            log.Info("job6触发...");
            sched.TriggerJob(new JobKey("job6", "group1"));

            log.Info("------- 等待20秒 --------------");

            Thread.Sleep(TimeSpan.FromSeconds(20));

            sched.Shutdown(true);
            log.Info("------- 关闭计划 -----------------");

            SchedulerMetaData metaData = sched.GetMetaData();
            log.Info(string.Format("执行任务数:{0}", metaData.NumberOfJobsExecuted));
        }
    }


代码均已经注释,以上是一些简单触发器的应用场景,主要是针对 持续时间的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值