• Quartz.Net—JobBuilder


    JobBuilder

     JobBuilder是一个建造者模式,链式建造。通过静态方法构建一个JobBuilder实例,然后再调用类方法Build()创建一个IJobDetail的实现。

    1、静态方法

    public static JobBuilder Create()
    {
        return new JobBuilder();
    }
    
    /// <summary>
    /// Create a JobBuilder with which to define a <see cref="IJobDetail" />,
    /// and set the class name of the job to be executed.
    /// </summary>
    /// <returns>a new JobBuilder</returns>
    public static JobBuilder Create(Type jobType)
    {
        JobBuilder b = new JobBuilder();
        b.OfType(jobType);
        return b;
    }
    
    /// <summary>
    /// Create a JobBuilder with which to define a <see cref="IJobDetail" />,
    /// and set the class name of the job to be executed.
    /// </summary>
    /// <returns>a new JobBuilder</returns>
    public static JobBuilder Create<T>() where T : IJob
    {
        JobBuilder b = new JobBuilder();
        b.OfType(typeof(T));
        return b;
    }
    
    
    /// <summary>
    /// Create a JobBuilder with which to define a <see cref="IJobDetail" />,
    /// and set the class name of the job to be executed.
    /// </summary>
    /// <returns>a new JobBuilder</returns>
    public static JobBuilder CreateForAsync<T>() where T : IJob
    {
        JobBuilder b = new JobBuilder();
        b.OfType(typeof(T));
        return b;
    }

    上面主要就是通过静态方法创建一个对象实例,或并且制定他的jobType  类型。既然是使用的类型,那么执行job任务的时候,一定是通过反射获取对象的。

    下面试类方法,设置jobType类型的。

    这种设计一个jobType的好处就是,任务第三方提供的任务,只要继承了  IJob接口的,都可以直接拿过来使用。

    public JobBuilder OfType<T>()
    {
        return 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="IJobDetail.JobType" />
    public JobBuilder OfType(Type type)
    {
        jobType = type;
        return this;
    }

    2、StroreDurably    Job持久化 

    默认情况下  job没有trigger的时候会被删除,

    IJobDetail job = JobBuilder.Create<MyJob2>().StoreDurably(true).Build();

    设置为true则不会删除。

    job和trigger都是存在ramjobstore这个里面。

    3、job名字

    /// <summary>
    /// Use a <see cref="JobKey" /> with the given name and default 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>
    /// <returns>the updated JobBuilder</returns>
    /// <seealso cref="JobKey" /> 
    /// <seealso cref="IJobDetail.Key" />
    public JobBuilder WithIdentity(string name)
    {
        key = new JobKey(name, null);
        return this;
    }
    
    /// <summary>
    /// Use a <see cref="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="JobKey" />
    /// <seealso cref="IJobDetail.Key" />
    public JobBuilder WithIdentity(string name, string group)
    {
        key = new JobKey(name, group);
        return this;
    }
    
    /// <summary>
    /// Use a <see cref="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="JobKey" />
    /// <seealso cref="IJobDetail.Key" />
    public JobBuilder WithIdentity(JobKey key)
    {
        this.key = key;
        return this;
    }
    View Code

    就是制定job的名子,这里名字类型为JobKey。如果没有指定名字,则在Builder的时候制定一个GUID

    if (key == null)
    {
    key = new JobKey(Guid.NewGuid().ToString(), null);
    }

    4、附加信息  UsingJobData     SetJobData

    构建job的时候可以指定一些附加信息,然后再job方法中可以拿到这些i信息。

    IJobDetail job = JobBuilder.Create<MyJob2>().StoreDurably(true).WithIdentity("ceshi2").UsingJobData("zangfeng","123").Build();

    public class MyJob2 : IJob
    {
    
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine(context.JobDetail.JobDataMap["zangfeng"]);
            return Task.Factory.StartNew(() => Console.WriteLine($"工作任务测试2:{DateTime.Now.ToString("yyyy-MM-dd
    HH:mm:ss")}"));
        }
    }

     5、创建  Build

    public IJobDetail Build()
    {
        JobDetailImpl job = new JobDetailImpl();
    
        job.JobType = jobType;
        job.Description = description;
        if (key == null)
        {
            key = new JobKey(Guid.NewGuid().ToString(), null);
        }
        job.Key = key;
        job.Durable = durability;
        job.RequestsRecovery = shouldRecover;
    
    
        if (!jobDataMap.IsEmpty)
        {
            job.JobDataMap = jobDataMap;
        }
    
        return job;
    }

    就是返回一个IJobDetail的实现JobDetailImpl,并初始化这个类型

  • 相关阅读:
    chrome 插件 初探
    正则表达式循环匹配
    pa week 28
    ToString()格式和用法大全(转自http://heromaimx.diandian.com/post/20100713/17583851)
    PreSubclassWindow详细分析(转自http://blog.csdn.net/liu_cheng_ran/article/details/7571843)
    根据控件类型,动态查找ItemTemplate的控件
    多线程死锁问题(转自http://blog.csdn.net/yqh5566/article/details/6625336)
    DDX_Control的作用(转自http://blog.csdn.net/yangtalent1206/article/details/6242529)
    通过SOAP请求与Microsoft Dynamic CRM online服务器进行连接
    MulDiv(转自http://st251256589.blog.163.com/blog/static/164876449201152184617407/)
  • 原文地址:https://www.cnblogs.com/wudequn/p/8491303.html
Copyright © 2020-2023  润新知