Job和JobDetails的关系

接一篇的例子

ISchedulerFactory schedFact = new StdSchedulerFactory();

IScheduler sched = schedFact.GetScheduler();

sched.Start();

 

IJobDetail job = JobBuilder.Create<FirstJob>()

    .WithIdentity("myJob", "group1")

    .Build(); 

ITrigger trigger = TriggerBuilder.Create()

    .WithIdentity("myTrigger", "group1")

    .StartNow()

    .Build();

 

sched.ScheduleJob(job, trigger);

Job和JobDetails是任务相关2个对象,所有的Job都实现了IJob接口,所有的JobDetails都实现了IJobDetails接口。

Quartz.NET中,我们使用调用器Scheduler, 将一个JobDetails对象关联到一个触发器中,而非直接关联一个Job对象到触发器对象中。原因是Job只是定义任务需要做什么,而不包含任务执行时需要的运行环境, 如果一个Job和具体的运行环境绑定,就没有办法复用了。

JobDetails包含了Job的所有运行环境,上面的实例代码中,我们使用JobBuilder类,来根据指定的Job类型,生成了一个对应的JobDetails。在JobDetails关联到触发器之后,触发器触发,JobDetails对象会自动进行以下操作

  1. 根据定义实例化一个对应的Job对象
  2. 为Job对象准备运行环境
  3. 执行Job对象的Execute方法

Job的运行环境

JobDetails如何为Job指定运行环境呢?

查看IJobDetails接口的定义,我们可以看到一个名为JobDataMap的对象,这个对象会在Job实例化成功之后,填充具体的运行环境。

下面我们修改一下我们当前的代码,首先修改一下program.cs

ISchedulerFactory schedFact = new StdSchedulerFactory();

 

IScheduler sched = schedFact.GetScheduler();

sched.Start();

 

IJobDetail job = JobBuilder.Create<FirstJob>()

    .UsingJobData("MyName", "Lunan")

    .WithIdentity("myJob", "group1")

    .Build();

 

ITrigger trigger = TriggerBuilder.Create()

    .WithIdentity("myTrigger", "group1")

    .StartNow()

    .Build();

 

sched.ScheduleJob(job, trigger);

这里UsingJobData方法,会将录入的键值对,保存在JobDataMap中,Job运行的时候,可以从上下文对象中获取到这些添加的键值对。

在这里调用多次UsingJobData方法可以录入多个键值对。

下面我们继续修改一下FirstJob类, 我们希望任务执行的时候,将MyName变量输出到控制台

public class FirstJob : IJob

{

    public void Execute(IJobExecutionContext context)

    {

        JobDataMap dataMap = context.JobDetail.JobDataMap;

        Console.WriteLine($"Hello {dataMap.GetString("MyName")}");

        Console.WriteLine("Hello World.");  

    }

}

这里从运行上下文对象context可以从读取JobDataMap中定义的参数。

查看效果

我们重新运行程序,程序正确读出了参数MyName

使用注入的方式接收参数

Quartz.Net支持注入的方式传递参数,这里我们对上面的Job代码进行一下微小的调整,添加一个名为MyName的属性,提供get;set;方法,直接使用该属性在控制台输出字符串,也可以得到一样的效果,而且代码看起来更加简洁

public string MyName { get; set; }

 

public void Execute(IJobExecutionContext context)

{

     Console.WriteLine($"Hello {MyName}");

     Console.WriteLine("Hello World.");

}

Quartz.NET学习笔记(二) Job和JobDetails的更多相关文章

  1. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  5. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  6. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  10. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

随机推荐

  1. in 索引失效的问题

    先安利一篇博文MySQL的or/in/union与索引优化 简单的in查询 索引失效: 步骤 1.检查建立索引没有 order_status 字段为普通索引的tinyint类型 2.检查是否使用了使索 ...

  2. 勾勾街:一个专业的苹果ios app 自助打包的网站,免越狱,免证书签名

    众所周知,苹果的APP开发是需要基于MAC环境的,而我们很多的开发者并没有这样的条件,如果单单为发布一款app就去买一台价格昂贵的MAC那成本就太高了! 就算你有一台MAC,也有能力自己开发出一款基于 ...

  3. CoreException: Could not get the value for parameter compilerId for plugin execution default-compile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1

    今天遇到一个奇怪的问题, 之前写好的代码, 更换环境后, 重新搭建的nexus, maven私服总是报错, 各种clean/update都不管用 原来是没写版本号, 后来加上3.1版本, 还是报错, ...

  4. 【尺取法】Jurisdiction Disenchantment

    [尺取法]Jurisdiction Disenchantment PROBLEM 时间限制: 1 Sec 内存限制: 128 MB 题目描述 The Super League of Paragons ...

  5. JetBrains系列IDE快捷键大全(转载)

    编辑 快捷键组合 说明 Ctrl + Space 代码自动完成提示(选择) Alt + Enter 显示意图动作和快速修复 Ctrl + P 参数信息 (在调用方法参数忘记的时候,提示) Ctrl + ...

  6. cadence布线完成后的补充操作

    完成布线之后,需要生成光绘文件和钻孔文件,在生成钻孔文件之前,还有几点补充!

  7. scala 2.11.x/spec/03-types.md

    scala/spec/03-types.md title: Types layout: default chapter: 3 --- Types Type ::= FunctionArgTypes ' ...

  8. git命令别名(Alias)

    每次切换分支: git ckeckout branch_name 等命令费时又费力,git 别名配置起来: 别名配置: git config --global alias.ck ckeckout 其他 ...

  9. COOKIE和Session的原理及异同

    COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...

  10. webpack 解决 semantic ui 中 google fonts 引用的问题

    semantic ui css 的第一行引用了 google web font api,由于不可告人而又众所周知的原因,这条链接在国内无法访问: @import url('https://fonts. ...