Quartz.NET总结(六)了解Jobs 和 Triggers
前面讲了一些Quartz.net 的一些东西, http://www.cnblogs.com/zhangweizhong/category/771057.html
但是发现有一些基础的东西,没有说到。Quartz.net 里面一些个基本的元素,比如Jobs,Triggers等。
Quartz API 的接口和类主要有:
- IScheduler - scheduler调度的主要接口api
- IJob - scheduler调度执行job需要实现的接口api
- IJobDetail - 用来定义jobs的实例
- ITrigger - 定义需要执行的job的调度构成
- JobBuilder - 用于定义/创建job的明细情况,定义job的实例
- TriggerBuilder - 用于定义/创建Trigger的实例
一个Scheduler调度的生命周期从开始创建,到结束关闭,都是通过SchedulerFactory 实现的。当我们创建了IScheduler接口后,我们就可以用来add、remove、或者list jobs和triggers,或者是其他与调度相关的工作。
Scheduler 调度的方法有:
- WithCalendarIntervalSchedule
- WithCronSchedule
- WithDailyTimeIntervalSchedule
- WithSimpleSchedule
使用DateBuilder可以轻松的构建特定的执行时间点等,如下个小时、十点钟、或者是其他的具体时间方式。
Jobs and Triggers
定义一个job必须实现了IJob接口,如下为IJob接口的方法:
namespace Quartz
{
public interface IJob
{
void Execute(JobExecutionContext context);
}
}
当 Job的trigger被触发后,scheduler调度的线程 就会执行 Execute 方法,同时 JobExecutionContext 包含运行环境参数等信息也会传递给execute方法。
比如说:job可以创建并存储在独立的scheduler调度中并由Trigger触发,不同的Trigger触发器可以触发相同的job任务。这种松耦合能够保证如果Job的触发规则变了,不用去该job,而只需修改某个Trigger的触发规则。同时,配置在scheduler调度中的job任务任然是可以被其他触发器使用,而不需要我们重新定义新的job任务。
接下来需要我们了解知道的job深入内容主要有IJob接口的Execute()方法和JobDetails。
对于一个job任务来说,我们知道如何制定特定type类型和如何编写实现一个job的代码,对于使用Quartz.NET来说我们需要了解它各种各样的属性参数,可以通过job的JobDetail明细类来进行分析。
JobDetail明细类的实例是通过JobBuilder创建的,JobBuilder允许我们使用连续的接口方式进行实现和编码。
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("myJob", "group1") // name "myJob", group "group1"
.Build(); // Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds()
.RepeatForever())
.Build(); // Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
接下来定义一个job实现类HelloJob:
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("HelloJob is executing.");
}
}
说到这里,有些 job任务是需要设置一些属性或者参数的 ,怎么给运行中的Job赋值呢? JobDataMap 提供了这方面的实现,也就是在 JobDetail对象中,设置job需要的值或参数。
JobDataMap
JobDataMap可以存储容纳任意数量的可序列化对象,以便在job实例化执行的时候使用。JobDataMap是IDictionary接口的实现,并添加了一些方便存储和检索原始类型数据的方法。
下面演示一小段代码来说明将job任务添加到scheduler调度前先将数据添加到JobDataMap:
Setting Values in a JobDataMap
// define the job and tie it to our DumbJob class
IJobDetail job = JobBuilder.Create<DumbJob>()
.WithIdentity("myJob", "group1") // name "myJob", group "group1"
.UsingJobData("jobSays", "Hello World!")
.UsingJobData("myFloatValue", 3.141f)
.Build();
下面演示下job任务执行时候从JobDataMap中取出数据的代码片段:
Getting Values from a JobDataMap
public class DumbJob : IJob
{
public void Execute(JobExecutionContext context)
{
JobKey key = context.JobDetail.Key; JobDataMap dataMap = context.JobDetail.JobDataMap; string jobSays = dataMap.GetString("jobSays");
float myFloatValue = dataMap.GetFloat("myFloatValue"); Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
}
}
有了JobDataMaps Job在执行的过程中,就可以取出需要的相关参数。
Quartz.NET总结(六)了解Jobs 和 Triggers的更多相关文章
- Quartz 第二课 Jobs and Triggers(官方文档翻译)
The Quartz API IScheduler—与scheduler交互的主要的接口 IJob—这个接口主要定义scheduler执行内容 IJobDetail—用于定义Jobs实例 ITrigg ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...
- Quartz的API简介及Jobs和Trigger介绍
Quartz的API: 主要api: The key interfaces of the Quartz API are: Scheduler - the main API for interactin ...
- 三)Wiring up jobs using triggers and the SchedulerFactoryBean
示例地址: https://github.com/witaste/quartz.git │ pom.xml │ └─src └─main ├─java │ └─cn │ └─zno │ └─job │ ...
- Window服务与Quartz.NET
Quartz.NET: http://quartznet.sourceforge.net/ (现为2.2版本) Sourceforge:http://sourceforge.net/projects/ ...
- Quartz1.8.5例子(十)
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
- (02) 任务(Jobs)和触发器(Triggers)
Quart 的 API Quartz API 中的关键接口和类如下: IScheduler-与调度器(scheduler)进行交互的主要 API: IJob-被组件继承和实现,由调度器来执行的接口: ...
- Quartz.NET syudy
Quartz.NET Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它 ...
- Quartz.net官方开发指南系列篇
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
随机推荐
- 设置/修改wampserverd默认项目地址
打开WampServer安装目录下bin\apache\Apache2.4.4\conf\文件夹打开httpd.conf 首先我们安装完wampserver后一般默认的项目存放地址如下: " ...
- php上线教程----阿里云下设值二级域名并将项目上线
在工作中,我们需要在一个主机地址下分配多个域名来上线多个项目,但是怎么设置一个二级域名并且完成上线项目的,接下来我们就以阿里云为例演示整个上线流程 首先登陆你的阿里云,找到你的域名 点击解析,进入解析 ...
- 从C#到TypeScript - Promise
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- Java Web(七) JSTL标签库
在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...
- d3.js 绘制极坐标图(polar plot)
0.引言 在极坐标系中,任意位置可由一个夹角和一段相对原点(极点)的距离表示.也就是说,我们可以用 (angle,r) 来表示极坐标系中的点. 1.数据 假设我们有如下数据集[ [10, 0.2], ...
- Ancient Cipher UVa1339
这题就真的想刘汝佳说的那样,真的需要想象力,一开始还不明白一一映射是什么意思,到底是有顺序的映射?还是没顺序的映射? 答案是没顺序的映射,只要与26个字母一一映射就行 下面给出代码 //Uva1339 ...
- ASP.NET MVC 使用Uploadify实现多文件异步无刷新上传
软件技术开发,合作请联系QQ:858-048-581 这里我通过使用uploadify组件来实现异步无刷新多文件上传功能. 1.首先下载组件包uploadify,我这里使用的版本是3.1 2.下载后解 ...
- 做了个新的UWP类库 Sharp2D
C#开发UWP的时候如果要实现高斯模糊效果的话,最好的选择似乎是微软的Win2D 但是Win2D太过庞大了,仅仅是庞大其实也没啥问题,毕竟net core就很庞大,但Win2d是一个Winmd组件 w ...
- js 封装原生ajax
jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只需要ajax,这时引入jquery库会造成资源浪费,也会显得页面臃肿.这时我们就 ...
- Git如何检出指定目录或文件
系统版本:Window 10,Git 版本:2.7.1 对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 git status 命令.下面是一个例子... 从 ...