所有方法图:

1.Create、Build

Create:创建一个TriggerBuilder

Build:生成Trigger

var trigger = TriggerBuilder.Create().Build();

底层实现

        /// <summary>
/// Create a new TriggerBuilder with which to define a
/// specification for a Trigger.
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>the new TriggerBuilder</returns>
public static TriggerBuilder Create()
{
return new TriggerBuilder();
} /// <summary>
/// Produce the <see cref="ITrigger" />.
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>a Trigger that meets the specifications of the builder.</returns>
public ITrigger Build()
{
if (scheduleBuilder == null)
{
scheduleBuilder = SimpleScheduleBuilder.Create();
}
IMutableTrigger trig = scheduleBuilder.Build(); trig.CalendarName = calendarName;
trig.Description = description;
trig.StartTimeUtc = startTime;
trig.EndTimeUtc = endTime;
if (key == null)
{
key = new TriggerKey(Guid.NewGuid().ToString(), null);
}
trig.Key = key;
if (jobKey != null)
{
trig.JobKey = jobKey;
}
trig.Priority = priority; if (!jobDataMap.IsEmpty)
{
trig.JobDataMap = jobDataMap;
} return trig;
}

2.StartAt、EndAt、StartNow

StartAt:设置触发器应该开始的时间

EndAt:设置触发器结束时间

StartNow:将触发器的启动时间设置为当前时刻

            var trigger = TriggerBuilder.Create()
.StartNow()
//.StartAt(DateTimeOffset.Now)
.EndAt(DateTimeOffset.Now.AddSeconds())
.WithSimpleSchedule(x=>x.RepeatForever().WithIntervalInSeconds())
.Build();

注:DateTime和DateTimeOffset的区别

DateTimeOffset是跨时区的,也就是按照UTC时间来执行

底层实现:

        /// <summary>
/// Set the time the Trigger should start at - the trigger may or may
/// not fire at this time - depending upon the schedule configured for
/// the Trigger. However the Trigger will NOT fire before this time,
/// regardless of the Trigger's schedule.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="startTimeUtc">the start time for the Trigger.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.StartTimeUtc" />
/// <seealso cref="DateBuilder" />
public TriggerBuilder StartAt(DateTimeOffset startTimeUtc)
{
startTime = startTimeUtc;
return this;
} /// <summary>
/// Set the time the Trigger should start at to the current moment -
/// the trigger may or may not fire at this time - depending upon the
/// schedule configured for the Trigger.
/// </summary>
/// <remarks>
/// </remarks>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.StartTimeUtc" />
public TriggerBuilder StartNow()
{
startTime = SystemTime.UtcNow();
return this;
} /// <summary>
/// Set the time at which the Trigger will no longer fire - even if it's
/// schedule has remaining repeats.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="endTimeUtc">the end time for the Trigger. If null, the end time is indefinite.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.EndTimeUtc" />
/// <seealso cref="DateBuilder" />
public TriggerBuilder EndAt(DateTimeOffset? endTimeUtc)
{
endTime = endTimeUtc;
return this;
}

3.ForJob

ForJob:指定对应关系的JobKey,四个重载方法,底层都是指定一个JobKey

  var job = JobBuilder.CreateForAsync<FirstJob>()
//.StoreDurably()
.WithIdentity("myJob", "jobGroup")
.SetJobData(new JobDataMap(dict))
.UsingJobData("Password","")
.Build(); //trigger WithIntervalInSeconds(1)间隔1m RepeatForever重复
//var trigger = TriggerBuilder.Create().WithSimpleSchedule(x =>
// x.WithIntervalInSeconds(1)
// //.RepeatForever()
// ).Build();. var trigger = TriggerBuilder.Create()
.StartNow()
.ForJob("myJob","jobGroup")
//.StartAt(DateTimeOffset.Now)
.EndAt(DateTimeOffset.Now.AddSeconds())
.WithSimpleSchedule(x=>x.RepeatForever().WithIntervalInSeconds())
.Build(); //scheduler.ListenerManager.AddJobListener(new CustomJobListener(),GroupMatcher<JobKey>.AnyGroup()); //scheduler.ListenerManager.AddTriggerListener(); await scheduler.ScheduleJob(job, trigger); //await Monitor(); var jobGroups =await scheduler.GetJobGroupNames();
Console.WriteLine(jobGroups.FirstOrDefault());

 

 底层实现

 /// <summary>
/// Set the identity of the Job which should be fired by the produced
/// Trigger.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="jobKey">the identity of the Job to fire.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.JobKey" />
public TriggerBuilder ForJob(JobKey jobKey)
{
this.jobKey = jobKey;
return this;
} /// <summary>
/// Set the identity of the Job which should be fired by the produced
/// Trigger - a <see cref="JobKey" /> will be produced with the given
/// name and default group.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="jobName">the name of the job (in default group) to fire.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.JobKey" />
public TriggerBuilder ForJob(string jobName)
{
jobKey = new JobKey(jobName, null);
return this;
} /// <summary>
/// Set the identity of the Job which should be fired by the produced
/// Trigger - a <see cref="JobKey" /> will be produced with the given
/// name and group.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="jobName">the name of the job to fire.</param>
/// <param name="jobGroup">the group of the job to fire.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.JobKey" />
public TriggerBuilder ForJob(string jobName, string jobGroup)
{
jobKey = new JobKey(jobName, jobGroup);
return this;
} /// <summary>
/// Set the identity of the Job which should be fired by the produced
/// Trigger, by extracting the JobKey from the given job.
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="jobDetail">the Job to fire.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="ITrigger.JobKey" />
public TriggerBuilder ForJob(IJobDetail jobDetail)
{
JobKey k = jobDetail.Key;
if (k.Name == null)
{
throw new ArgumentException("The given job has not yet had a name assigned to it.");
}
jobKey = k;
return this;
}

4.UsingJobData

UsingJobData:添加Job数据,底层是key-vaule的JobDataMap,和JobBuilder里面的一样

              await Task.Run(() =>
{
//var userName=context.MergedJobDataMap.GetString("UserName");
//var password = context.MergedJobDataMap.GetString("Password");
//Console.WriteLine(userName);
//Console.WriteLine(password);
var name = context.Trigger.JobDataMap.GetString("name"); Console.WriteLine(name);
//Console.WriteLine("Hello World !");
});

5.WithPriority

WithPriority:设置触发器的优先级。当多个触发器具有相同的启动时间,调度程序将启动优先级最高的,默认5,数字大的优先级高

  var trigger1 = TriggerBuilder.Create()
//.StartNow()
//.ForJob("myJob", "jobGroup")
.StartAt(DateBuilder.EvenSecondDateAfterNow())
.UsingJobData("name", "trigger1")
.WithPriority()
.EndAt(DateTimeOffset.Now.AddMinutes())
.WithSimpleSchedule(x => x.RepeatForever().WithIntervalInSeconds())
.Build(); var trigger2 = TriggerBuilder.Create()
//.StartNow()
//.ForJob("myJob", "jobGroup")
.StartAt(DateBuilder.EvenSecondDateAfterNow())
.UsingJobData("name", "trigger2")
.WithPriority()
.EndAt(DateTimeOffset.Now.AddMinutes())
.WithSimpleSchedule(x => x.RepeatForever().WithIntervalInSeconds())
.Build(); HashSet<ITrigger> triggers = new HashSet<ITrigger>(); triggers.Add(trigger1); triggers.Add(trigger2); await scheduler.ScheduleJob(job, triggers,true);

底层实现

       public TriggerBuilder WithPriority(int priority)
{
this.priority = priority;
return this;
}
  private int priority = TriggerConstants.DefaultPriority;
    public static class TriggerConstants
{
/// <summary>
/// The default value for priority.
/// </summary>
public const int DefaultPriority = ;
}

6.WithSchedule

所有ScheduleBuilder的生成接口,默认有:SimpleScheduleBuilder、CalendarIntervalScheduleBuilder、CronScheduleBuilder、DailyTimeIntervalScheduleBuilder

表示可以扩展自己的实现类

        /// <summary>
/// Set the <see cref="IScheduleBuilder" /> that will be used to define the
/// Trigger's schedule.
/// </summary>
/// <remarks>
/// <para>The particular <see cref="IScheduleBuilder" /> used will dictate
/// the concrete type of Trigger that is produced by the TriggerBuilder.</para>
/// </remarks>
/// <param name="scheduleBuilder">the SchedulerBuilder to use.</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="IScheduleBuilder" />
/// <seealso cref="SimpleScheduleBuilder" />
/// <seealso cref="CronScheduleBuilder" />
/// <seealso cref="CalendarIntervalScheduleBuilder" />
public TriggerBuilder WithSchedule(IScheduleBuilder scheduleBuilder)
{
this.scheduleBuilder = scheduleBuilder;
return this;
}

7.WithIdentity

设置TriggerKey,底层就是实现TriggerKey

            var trigger2 = TriggerBuilder.Create()
//.StartNow()
//.ForJob("myJob", "jobGroup")
.StartAt(DateBuilder.EvenSecondDateAfterNow())
.UsingJobData("name", "trigger2")
.WithPriority()
.EndAt(DateTimeOffset.Now.AddMinutes())
.WithIdentity(new TriggerKey("myTrigger"))
.WithSimpleSchedule(x => x.RepeatForever().WithIntervalInSeconds())
.Build();
  /// <summary>
/// Use a <see cref="TriggerKey" /> with the given name and default group to
/// identify the Trigger.
/// </summary>
/// <remarks>
/// <para>If none of the 'withIdentity' methods are set on the TriggerBuilder,
/// then a random, unique TriggerKey will be generated.</para>
/// </remarks>
/// <param name="name">the name element for the Trigger's TriggerKey</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="TriggerKey" />
/// <seealso cref="ITrigger.Key" />
public TriggerBuilder WithIdentity(string name)
{
key = new TriggerKey(name, null);
return this;
} /// <summary>
/// Use a TriggerKey with the given name and group to
/// identify the Trigger.
/// </summary>
/// <remarks>
/// <para>If none of the 'withIdentity' methods are set on the TriggerBuilder,
/// then a random, unique TriggerKey will be generated.</para>
/// </remarks>
/// <param name="name">the name element for the Trigger's TriggerKey</param>
/// <param name="group">the group element for the Trigger's TriggerKey</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="TriggerKey" />
/// <seealso cref="ITrigger.Key" />
public TriggerBuilder WithIdentity(string name, string group)
{
key = new TriggerKey(name, group);
return this;
} /// <summary>
/// Use the given TriggerKey to identify the Trigger.
/// </summary>
/// <remarks>
/// <para>If none of the 'withIdentity' methods are set on the TriggerBuilder,
/// then a random, unique TriggerKey will be generated.</para>
/// </remarks>
/// <param name="key">the TriggerKey for the Trigger to be built</param>
/// <returns>the updated TriggerBuilder</returns>
/// <seealso cref="TriggerKey" />
/// <seealso cref="ITrigger.Key" />
public TriggerBuilder WithIdentity(TriggerKey key)
{
this.key = key;
return this;
}

8.WithDesciption

添加说明

            var trigger2 = TriggerBuilder.Create()
//.StartNow()
//.ForJob("myJob", "jobGroup")
.StartAt(DateBuilder.EvenSecondDateAfterNow())
.UsingJobData("name", "trigger2")
.WithPriority()
.EndAt(DateTimeOffset.Now.AddMinutes())
.WithIdentity(new TriggerKey("myTrigger"))
.WithDescription("description")
.WithSimpleSchedule(x => x.RepeatForever().WithIntervalInSeconds())
.Build();

9.WithDailyTimeIntervalSchedule、WithSimpleSchedule、WithCronSchedule、WithCalendarIntervalSchedule

一些ScheduleBuilder的实现类

 

Quartz.Net系列(六):Quartz五大构件Trigger之TriggerBuilder解析的更多相关文章

  1. Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解

    所有方法图 1.SimpleScheduleBuilder RepeatForever:指定触发器将无限期重复. WithRepeatCount:指定重复次数 var trigger = Trigge ...

  2. Quartz.Net系列(九):Trigger之DailyTimeIntervalScheduleBuilder详解

    1.介绍 中文意义就是每日时间间隔计划生成 2.API讲解 (1)WithInterval.WithIntervalInHours.WithIntervalInMinutes.WithInterval ...

  3. Quartz.Net系列(九):Trigger之CronScheduleBuilder和Cron表达式详解

    1.使用 var scheduler =await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); var jo ...

  4. java基础解析系列(六)---深入注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...

  5. java基础解析系列(六)---注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer缓存及 ...

  6. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  7. Quartz.Net系列(十六):通过Plugins模式使用Xml方式配置Job和Trigger和自定义LogPrivider

    1.简单介绍 Quarz.Net中采用插件式来实现配置文件配置,通过XMLSchedulingDataProcessor类进行Xml数据处理 默认配置文件命名:quart_jobs.xml publi ...

  8. 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

    一. 五大构件 引言: Quartz.Net的五大构件 1.  调度器:Scheduler 2.  作业任务:Job 3.  触发器: Trigger 4.  线程池: SimpleThreadPoo ...

  9. 定时调度系列之Quartz.Net详解

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

随机推荐

  1. PHP基础-自定义函数-变量范围-函数参数传递

    一.自定义函数    function 函数名([形式参数1,形式参数2,....形式参数n]){        //各种PHP代码....        //......        return ...

  2. Java 泛型与集合

    1.List练习,请用泛型的写法来完成. 已知有一个Worker 类如下: public class Worker  { private int age; private String name; p ...

  3. CSS基础选择器总结

    基础选择器 作用 特点 使用情况 用法 标签选择器 可以选出所有相同的标签,比如p 不能差异化选择 较多 p {color:red;} 类选择器 可以选出1个或多个标签 可以根据需求选择 非常多 .n ...

  4. MySQL/MariaDB随笔一

    1.yum 安装后先跑一下系统自带的安全脚本,否则数据库很不安全,任何人都可以登录 [root@xixi ~]# mysql_secure_installation NOTE: RUNNING ALL ...

  5. 微信小程序初探--写个扫雷分享给你玩

    闲暇里,想学一下微信小程序, 于是,用微信小程序原生做了个扫雷玩. 以下略作总结,分享给大家. 微信里下拉,输入[mini计算器], 看到这个图标的就是了: 说好的扫雷,怎么变成计算器了?原因后面解释 ...

  6. pandas如何逐行需改DataFrame

    逐行修改DataFrame而不会报SettingwithCopyWarning警告的方法: df.iloc[行数,df.columns.get_loc(列名)]=new_value 参考:https: ...

  7. 使用 git add -p 整理 patch

    背景 当我们修改了代码准备提交时,本地的改动可能包含了不能提交的调试语句,还可能需要拆分成多个细粒度的 pactch. 本文将介绍如何使用 git add -p 来交互式选择代码片段,辅助整理出所需的 ...

  8. jQuery-显示与隐藏

    1.显示与隐藏 show([speed,easing,function]) speed:毫秒单位的时间值 hide([speed,easing,function]) 用法:元素.show()/元素.h ...

  9. Rocket - debug - Example: DMI

    https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...

  10. DevOps - 从渐进式交付说起(含实践 Demo)

    作者:CODING - 王炜 1. 开篇 如果让你主导一款千万.甚至亿级用户产品的功能迭代,你会怎么做?你需要面对的挑战可能来自于: 商业战略的变化带来新的产品诉求,而产品的任何改动哪怕仅是界面调整, ...