网站首页 > 教程分享 正文
前面讲了一些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(40)
.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在执行的过程中,就可以取出需要的相关参数。
猜你喜欢
- 2024-10-24 Quartz.NET配置文件:简便任务调度,轻松管理
- 2024-10-24 美国互联网内容创业有了一面赢利的旗帜:Quartz
- 2024-10-24 Spring的定时作业之Quartz(spring 定时)
- 2024-10-24 标致Quartz上海车展亮相 搭载混动系统
- 2024-10-24 任务调度框架Quartz快速入门(任务调度框架有哪些)
- 2024-10-24 Quartz数字媒体中心——矩形空间中的无限可能/办公家具定制
- 2024-10-24 quartz表达式详解(quartz手表是什么意思)
- 2024-10-24 中兴首款智能手表Quartz发布:高颜值、支持3G
- 2024-10-24 任务调度框架 Quartz 用法指南「超详细」
- 2024-10-24 RM 21-02 Aerodyne陀飞轮腕表蓝色Quartz TPT?石英纤维款
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)