Quartz.NET 作业调度(一):Test

栏目: Java · 发布时间: 6年前

内容简介:Quartz.NET 作业调度(一):Test

Quartz.NET 是一个开源的作业调度框架,是 Java 作业调度框架 Quartz 的.NET 版本,对于周期性的任务,其作业和触发器的结合,极大的简化了代码的编写,大多时候我们只需要关注作业本身的逻辑。 Quartz.NET 支持持久化、集群。 Quartz.NET 3.0 已经开始支持 .NET Core/.NET Standard 2.0。

体系结构

Quartz.NET 作业调度(一):Test

Job 为作业的接口,JobDetail 用来描述 Job 的实现类及其它相关的静态信息;Trigger 作为作业的定时管理工具,一个 Trigger 只能对应一个作业实例,而一个作业实例可对应多个 Trigger ;Scheduler 做为定时任务容器,它包含了所有触发器和作业,每个 Scheduler 都存有 JobDetail 和 Trigger

的注册,一个 Scheduler 中可以注册多个 JobDetail 和多个 Trigger 。

安装

创建一个基于 .NET Core 2.0 控制台程序,Nuget 安装 Quartz 即可。

Install-Package Quartz

使用说明

主要接口和类说明:

IScheduler :和调度器交互的主要接口

JobBuilder:定义 JobDetail 实例

IJobDetail:定义 Job 实例及其它相关的静态信息

IJob:自定义的作业模块所要继承的接口,调度器会调用这个实现

TriggerBuilder:定义 Trigger 实例

ITrigger:定义 Job 被触发的时间

创建流程:

  1. 创建作业调度池 IScheduler
  2. 创建作业 IJobDetail
  3. 创建触发器 ITrigger
  4. 将作业和触发器加入到作业调度池中
  5. 开始运行

代码实现:

private static async Task RunScheduler()
{
	// 创建作业调度池
	ISchedulerFactory factory = new StdSchedulerFactory();
	IScheduler scheduler = await factory.GetScheduler();

	// 创建作业
	IJobDetail job = JobBuilder.Create<HelloJob>()
		.WithIdentity("job1", "group1")
		.Build();

	// 创建触发器,每10s执行一次
	ITrigger trigger = TriggerBuilder.Create()
		.WithIdentity("trigger1", "group1")
		.StartNow()
		.WithSimpleSchedule(x => x
			.WithIntervalInSeconds(10)
			.RepeatForever())
		.Build();

	// 加入到作业调度池中
	await scheduler.ScheduleJob(job, trigger);

	// 开始运行
	await scheduler.Start();
}

作业实现类 HelloJob

public class HelloJob : IJob
{
	/// <summary>
	/// 作业调度定时执行的方法
	/// </summary>
	/// <param name="context"></param>
	/// <returns></returns>
	public async Task Execute(IJobExecutionContext context)
	{
		await Console.Out.WriteLineAsync("Hello QuartzNet...");
	}
}

代码说明:

通过 StdSchedulerFactory 获取到调度工厂 ISchedulerFactory,通过调度工厂的 GetScheduler 方法获取到一个调度器 scheduler 。初始化调度器 scheduler 之后, 就可以启动、 备用、 关闭。

通过 JobBuilder 创建一个 IJobDetail 作业详情 ,指定一个 IJob 的实现类 HelloJob ,同时指定了作业详情标识的键名和组名。

通过 TriggerBuilder 创建一个 ITrigger 触发器,指定了这个触发器标识的键名和组名,触发器只有在启动状态才能工作,这里设置了 StartNow,同时设置了触发器的执行时间,每隔10s执行一次。当 Trigger 触发的时候, HelloJob 的Execute(..) 方法就会在调度器 scheduler 的工作线程中执行,

这里设置的 RepeatForever 是指在当前守护进程内重复执行,如果程序被关闭了,那必然不会继续执行。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spark

Spark

Bill Chambers、Matei Zaharia / O′Reilly / 2017-10-31 / GBP 39.99

Learn how to use, deploy, and maintain Apache Spark with this comprehensive guide, written by the creators of the open-source cluster-computing framework. With an emphasis on improvements and new feat......一起来看看 《Spark》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具