作业调度框架Quartz.NET-现学现用-01-快速入门
原文:作业调度框架Quartz.NET-现学现用-01-快速入门
前言
你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用.NET编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz.NET调度器。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
Quartz.NET 简介
Quartz.NET是一个用C#编写的基于.NetCore的纯.Net库,是一个非常流行的开源Java作业调度框架Quartz的.Net版本。这个项目很大程度上归功于原始的Java项目。此项目已更新到3.0+版本,也是博主学习使用的版本。官方文档。
Quartz.NET 快速入门
Quartz.NET 关键接口和类
- IScheduler : - 与调度程序交互的主要API。
- IJob - 由您希望由调度程序执行的组件实现的接口。
- IJobDetail - 用于定义Jobs的实例。
- ITrigger - 一个触发器,用于定义执行给定作业的计划。
- JobBuilder - 用于定义/构建JobDetail实例,用于定义Jobs的实例。
- TriggerBuilder - 用于定义/构建触发器实例。
示例应用程序
using Quartz;
using Quartz.Impl;
using System;
namespace MGToastServer
{
class Program
{
static void Main(string[] args)
{
StartUpJobs.StartUp().GetAwaiter().GetResult();
Console.ReadKey();
}
}
public static class StartUpJobs
{
public static async Task StartUp()
{
try
{
//第一步:从工厂中获取Scheduler实例
NameValueCollection props = new NameValueCollection();
StdSchedulerFactory factory = new StdSchedulerFactory(props);
IScheduler scheduler = await factory.GetScheduler();
//第二步:然后运行它
await scheduler.Start();
//第三步:定义作业并绑定到HelloJob类,HelloJob类继承IJob接口
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
//UsingJobData 可以用来传参数
.UsingJobData("appKey", "123456QWE")
.UsingJobData("appName", "小熊猫")
.UsingJobData("api", "https://www.baidu.com")
.Build();
//第四步:创建触发器。设定,每十秒执行一次作业。永远重复。
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1") //指定唯一标识,触发器名字,和组名字
//这对于将作业和触发器组织成“报告作业”和“维护作业”等类别非常有用。
//作业或触发器的键的名称部分在组内必须是唯一的
.StartNow() //从现在开始执行
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10) //每十秒执行一次
.RepeatForever()) //永远重复
.Build();
//第五步:作业与触发器组合,安排任务
await scheduler.ScheduleJob(job, trigger);
//可以设置关闭该调度
//await Task.Delay(TimeSpan.FromSeconds(5));
//await scheduler.Shutdown();
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
}
}
public class HelloJob : IJob
{
private string appKey;
private string appName;
private string appApi;
public async Task Execute(IJobExecutionContext context)
{
JobKey jkey = context.JobDetail.Key;
TriggerKey tKey = context.Trigger.Key;
JobDataMap dataMap = context.MergedJobDataMap;
appKey = dataMap.GetString("appKey"); //通过键值获取数据
appName = dataMap.GetString("appName");
appApi = dataMap.GetString("api");
await Console.Error.WriteLineAsync("[" + DateTime.Now.ToLongTimeString() + "]" + "开始推送:\n" + "JobKey:" + jkey + "\nTriggerKey:" + tKey + "\nAppKey:" + appKey + " appName: " + appName + ", and AppAPI: " + appApi);
}
}
}
实验效果
如截图所示,每十秒执行一次任务。并且可以接收到传入的参数。
下篇
Thanks
作业调度框架Quartz.NET-现学现用-01-快速入门的更多相关文章
- 作业调度框架Quartz.NET-现学现用-02-任务监听
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...
- 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...
- 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书
原文:作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预 ...
- .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练
一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...
- 作业调度框架Quartz.NET | 大专栏
原文:作业调度框架Quartz.NET | 大专栏 作业调度框架Quartz.NET 发表于 2019-09-28 | 分类于 前端 | 没有评论 前言 任务调度系统并不是完美的,它会出现任务执行 ...
- 作业调度框架 Quartz.NET 2.0 StepByStep
注:目前网上诸多介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都是1.0版本的,而这个项目在2.0版本对项目进行了比较大规模的修改,使得原有的很多例子都不能运行,故写 ...
- .Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- (转).Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- java作业调度框架Quartz
在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点.每周的周日.每个月的15号,Apache Quartz就是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间 ...
随机推荐
- 平安寿险Java面试-社招-四面(2019/08)
个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...
- Tcl二进制数据
binary format 格式化描述符 参数1 参数2...参数N binary scan 二进制数据 格式化描述符 变量1 变量2 ... 变量N 格式化描述符由两部分组成,第一是格式化类型关键字 ...
- Deep-learning augmented RNA-seq analysis of transcript splicing | 用深度学习预测可变剪切
可变剪切的预测已经很流行了,目前主要有两个流派: 用DNA序列以及variant来预测可变剪切:GeneSplicer.MaxEntScan.dbscSNV.S-CAP.MMSplice.clinVa ...
- MySQL Group By 实例讲解(二)
mysql group by使用方法实例讲解 MySQL中GROUP BY语句用于对某个或某些字段查询分组,并返回这个字段重复记录的第一条,也就是每个小组(无排序)里面的第一条. 本文章通过实例向大家 ...
- 修改mysql开启innodb支持
1.找到/etc/my.cnf文件 a. 修改默认引擎 b. 注释掉: loose-skip-innodb c.打开被注释掉的innodb配置 2.重启服务器 /etc/init.d/mysql r ...
- Python3基础 函数 函数名赋值操作
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- C# 恢复工作空间,删除Unversioned文件,两种方式
//通过命令行清理svn的工作空间,删除未add的文件,revert修改的文件 public static bool RevertDelUnversioned(string svnPath) { tr ...
- E: Unable to correct problems, you have held broken packages-之apt-get 下载报依赖问题
今天在新来了一台ubutnu 18.04 在安装zabbix客户端是报依赖问题 root@VM_0_10:~# apt-get install zabbix-agent Reading package ...
- mysql查询之获取第n高薪水
获取 Employee 表中第 n 高的薪水(Salary) +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 ...
- docker+k8s基础篇一
Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...