Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析

摘要:
所有方法图:1.Create,OfType JobBuilder中有五种方法可以执行Action:varjob1=JobBuilder。Create()。OfType<FirstJob>()。Build();varjob2=JobBuilder.Create<FirstJob>()。Build();varjob3=JobBuilder.CreateForAsync().Build(

 所有方法图:

Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析第1张

1.Create,OfType 

在JobBuilder中有五种方法执行Action:

            var job1 = JobBuilder.Create().OfType<FirstJob>().Build();

            var job2 = JobBuilder.Create<FirstJob>().Build();

            var job3 = JobBuilder.CreateForAsync<FirstJob>().Build();

            var job4 = JobBuilder.Create(typeof(FirstJob));

            var job5 = JobBuilder.Create().OfType(typeof(FirstJob));

底层都是调用OfType方法来获取Type

    public JobBuilder OfType<T>()
    {
      return this.OfType(typeof (T));
    }

    /// <summary>
    /// Set the class which will be instantiated and executed when a
    /// Trigger fires that is associated with this JobDetail.
    /// </summary>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="P:Quartz.IJobDetail.JobType" />
    public JobBuilder OfType(Type type)
    {
      this.jobType = type;
      return this;
    }

2.RequestRecovery

请求恢复,也就是说当应用发生故障的时候,是否重新执行默认是false

            var job = JobBuilder.Create<FirstJob>()
                                .RequestRecovery()//请求恢复,也就是说当应用发生故障的时候,是否重新执行
                                .Build();
    public JobBuilder RequestRecovery()
    {
      return this.RequestRecovery(true);
    }

    /// <summary>
    /// Instructs the <see cref="T:Quartz.IScheduler" /> whether or not the job
    /// should be re-executed if a 'recovery' or 'fail-over' situation is
    /// encountered.
    /// </summary>
    /// <remarks>
    /// If not explicitly set, the default value is <see langword="false" />.
    /// </remarks>
    /// <param name="shouldRecover"></param>
    /// <returns>the updated JobBuilder</returns>
    public JobBuilder RequestRecovery(bool shouldRecover)
    {
      this.shouldRecover = shouldRecover;
      return this;
    }

3.WithDescription

设置描述

            var job = JobBuilder.Create<FirstJob>()
                                .RequestRecovery()//请求恢复,也就是说当应用发生故障的时候,是否重新执行
                                .WithDescription("描述") //设置描述
                                .Build();
    public JobBuilder WithDescription(string description)
    {
      this.description = description;
      return this;
    }

4.WithIdentity

给JobDetail起一个Id,方便后面检索

WithIdentity的三种写法

            var job = JobBuilder.Create<FirstJob>()
                                .RequestRecovery()//请求恢复,也就是说当应用发生故障的时候,是否重新执行
                                .WithDescription("描述") //设置描述
                                .WithIdentity("myJob","myJobGroup")
                                .WithIdentity("myJob")
                                .WithIdentity(JobKey.Create("myJob"))
                                .Build();
  public JobBuilder WithIdentity(string name)
    {
      this.key = new JobKey(name, (string) null);
      return this;
    }

    /// <summary>
    /// Use a <see cref="T:Quartz.JobKey" /> with the given name and group to
    /// identify the JobDetail.
    /// </summary>
    /// <remarks>
    /// <para>If none of the 'withIdentity' methods are set on the JobBuilder,
    /// then a random, unique JobKey will be generated.</para>
    /// </remarks>
    /// <param name="name">the name element for the Job's JobKey</param>
    /// <param name="group"> the group element for the Job's JobKey</param>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="T:Quartz.JobKey" />
    /// <seealso cref="P:Quartz.IJobDetail.Key" />
    public JobBuilder WithIdentity(string name, string group)
    {
      this.key = new JobKey(name, group);
      return this;
    }

    /// <summary>
    /// Use a <see cref="T:Quartz.JobKey" /> to identify the JobDetail.
    /// </summary>
    /// <remarks>
    /// <para>If none of the 'withIdentity' methods are set on the JobBuilder,
    /// then a random, unique JobKey will be generated.</para>
    /// </remarks>
    /// <param name="key">the Job's JobKey</param>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="T:Quartz.JobKey" />
    /// <seealso cref="P:Quartz.IJobDetail.Key" />
    public JobBuilder WithIdentity(JobKey key)
    {
      this.key = key;
      return this;
    }

5.StoreDurably

保留存储,也就是说当执行完后,保留Job

            var job = JobBuilder.CreateForAsync<FirstJob>()
                                .StoreDurably()
                                .Build();

Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析第2张

    /// <summary>
    /// Whether or not the job should remain stored after it is
    /// orphaned (no <see cref="T:Quartz.ITrigger" />s point to it).
    /// </summary>
    /// <remarks>
    /// If not explicitly set, the default value is <see langword="false" />
    /// - this method sets the value to <code>true</code>.
    /// </remarks>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="P:Quartz.IJobDetail.Durable" />
    public JobBuilder StoreDurably()
    {
      return this.StoreDurably(true);
    }

    /// <summary>
    /// Whether or not the job should remain stored after it is
    /// orphaned (no <see cref="T:Quartz.ITrigger" />s point to it).
    /// </summary>
    /// <remarks>
    /// If not explicitly set, the default value is <see langword="false" />.
    /// </remarks>
    /// <param name="durability">the value to set for the durability property.</param>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="P:Quartz.IJobDetail.Durable" />
    public JobBuilder StoreDurably(bool durability)
    {
      this.durability = durability;
      return this;
    }

6.UsingJobData,SetJobData

添加Job数据

每个JobDetail内都有一个JobDataMap,包含了关联到这个Job的数据,在Job类中,可以通过context取出该数据,进行业务流程处理。

jec = new JobExecutionContextImpl(scheduler, firedTriggerBundle, job);
            Dictionary<string, string> dict = new Dictionary<string, string>();

            dict.Add("UserName","Jack");
 
            var job = JobBuilder.CreateForAsync<FirstJob>()
                                //.StoreDurably()
                                .SetJobData(new JobDataMap(dict))
                                .UsingJobData("Password","123456")
                                .Build();
    public class FirstJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
              await Task.Run(() =>
             {
                 var userName=context.MergedJobDataMap.GetString("UserName");
                 var password = context.MergedJobDataMap.GetString("Password");
                 Console.WriteLine(userName);
                 Console.WriteLine(password);
                 //Console.WriteLine("Hello World !");
             });
        }
    }

Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析第3张

        public JobBuilder UsingJobData(string key, double value)
        {
            jobDataMap.Put(key, value);
            return this;
        }

        /// <summary>
        /// Add the given key-value pair to the JobDetail's <see cref="JobDataMap" />.
        /// </summary>
        ///<returns>the updated JobBuilder</returns>
        /// <seealso cref="IJobDetail.JobDataMap" />
        public JobBuilder UsingJobData(string key, bool value)
        {
            jobDataMap.Put(key, value);
            return this;
        }

        /// <summary>
        /// Add all the data from the given <see cref="JobDataMap" /> to the 
        /// <see cref="IJobDetail" />'s <see cref="JobDataMap" />.
        /// </summary>
        ///<returns>the updated JobBuilder</returns>
        /// <seealso cref="IJobDetail.JobDataMap" />
        public JobBuilder UsingJobData(JobDataMap newJobDataMap)
        {
            jobDataMap.PutAll(newJobDataMap);
            return this;
        }

        /// <summary>
        /// Replace the <see cref="IJobDetail" />'s <see cref="JobDataMap" /> with the
        /// given <see cref="JobDataMap" />.
        /// </summary>
        /// <param name="newJobDataMap"></param>
        /// <returns></returns>
        public JobBuilder SetJobData(JobDataMap newJobDataMap)
        {
            jobDataMap = newJobDataMap;
            return this;
        }

免责声明:文章转载自《Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)mysql进制之间的转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UiPath Level 1-Lesson 3. Data Manipulation

学习大纲 如何拆分字符串 如何改变部分字符串的格式 如何在表格中根据条件选中特定的行 1. 标量型变量,集合,表格 活动的属性都有预定义的数据类型。鼠标悬停在属性面板的某个属性上,就会出现相应的提示。 使用右键菜单或Ctrl+K在属性栏创建的变量,会直接设置为属性预定义的类型。 标量型变量 (Scalar Variables):一个单独的固定类...

PHP单点登陆

本文主要介绍了利用webservice,session,cookie技术,来进行通用的单点登录系统的分析与设计。具体实现语言为PHP。单点 登录,英文名为Single Sign On,简称为 SSO,是目前企业,网络业务的用户综合处理的重要组成部分。而SSO的定义,是在多个应用系统中,用户只需要登陆一次就可以访问所有相互信任的应用系 统。 动机: 用过uc...

Android笔记之权限库AndPermission

GitHub地址:https://github.com/yanzhenjie/AndPermission 这个库可以节省不少代码量和时间 使用示例如下 findViewById(R.id.btnGetLocation).setOnClickListener(new View.OnClickListener() { @...

.NET Core+QQ第三方授权登录

安装包 dotnet add package AspNet.Security.OAuth.QQ 接上文GitHub第三方授权登录 申请过程不介绍了,申请者资料,个人也是可以申请成功的。 这时候有二个参数就是clientid clientsecret APP ID:xxxx APP Key:xxxxxx 其中平台信息,这个申请审核通过后,不要修改,千万不...

RedisTemplate

Spring Boot中Jedis几个api返回值的确认 @RequestMapping("/del/{key}") public String del(@PathVariable("key") String key) { try { //键不存在时,也不会抛异常 re...

ICE3.7.3集群安装与部署

ICE3.7.3集群安装与部署前言: 本文ice3.7.3基于ubuntu16.04版安装,如果版本不一致可能造成离线安装包缺少依赖或者依赖版本过低或过高的问题,需要重新下载安装包。本安装包包含openjdk_1.8.0_242无需自己下载安装。 准备五台ubuntu16.04(三台也可以)icegrid-master、icegrid-slave、node...