文档详情

Quartz(时间服务器)学习笔记.docx

发布:2017-12-18约1.62万字共16页下载文档
文本预览下载声明
Quartz.NETQuartz.NET 是一个开源的作业调度框架,能够应用在小到轻量级的应用程序,大到重量级的企业级系统中的全功能的开源任务调度系统。一、特点API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况。 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度,可以使用“Cron表达式”(类似于正则表达式)。 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等 。作业可以保存在 RAM 中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等。 集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理。支持两种途径配置应用程序的运行时属性:声明式和编程式。二、Quartz的目录结构内容目录名 存放内容Quartz.Collection 数据结构Quartz.Core调度器,线程池Quartz.Impl接口实现类Quartz.Job作业Quartz. Listener 监听器Quartz. Plugin 扩展插件Quartz. Simpl 简单的调试器、线程池Quartz. SPI 接口Quartz. Util 实用方法Quartz. Xml Xml配置操作类三、作业流程的定制作业流程是在调度器的统一调度下完成的,它可以调度多个作业,触发器提供作业执行的条件(每天 8:00 am),触发器与作业关联,它们是 1:N 的关系。JobJob 每一个 Quartz Job 必须有一个实现IJob接口的具体类。这个接口仅有一个要在 Job 中实现的方法,execute(),方法 execute() 的原型如下: void?Execute(JobExecutionContext?context); 可以在 execute() 方法中执行你的业务逻辑:例如,也许你会调用其他构造的实例上的方法,发送一个电子邮件、FTP 传一个文件、调用一个 Web 服务、执行一个工作流等。当 Quartz?调用 execute() 方法,会传递一个 JobExecutionContext? 上下文变量,里面封装有 Quartz 的运行时环境和当前正执行的 Job。通过 JobExecutionContext?,你可以访问到调度器的信息,作业和作业上的触发器的信息,还有更多更多的信息。例如:public class TestJobImpl : IExtendedJob { private string jobContent; public string JobContent { get { return jobContent; } set { jobContent = value; } } public TestJobImpl() : base() { } public void Execute(JobExecutionContext context) { jobContent = context.MergedJobDataMap.Get(JobContent).ToString(); System.Diagnostics.ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = jobContent; startInfo.WindowStyle = ProcessWindowStyle.Normal; Process pro = new Process(); pro.StartInfo = startInfo; pro.Start(); pro.WaitForExit(5000); pro.Kill(); }}IStatefulJob(有状态Job) 一个 Job 实例可以被定义为“有状态的”或者“无状态的”。在执行无状态的任务过程中任何对 JobDataMap 所作的更改都将丢失。有状态的任务恰好相反,它在任务的每次执行之后重新存储 JobDataMap 。有状态任务的一个缺点就是它不能并发执行。也就是说,如果任务有状态,那么当触发器试图触发它,触发器就会被阻塞直到前面的执行完成。想使任务有状态,它就要实现 IStatefulJob 接口而不是实现IJob接口。IStatefulJob接口仅仅是扩展了 Job 接口,未加入新的方法。你只需要通过使用与 Job 接口相同的 execute() 方法简单的实现 IStatefulJob接口即可。假如你有已存在的 Job 类,你所有要做的只是改变 Job 的接口为 IStatefulJob。Public ?interface?IStatefu
显示全部
相似文档