Quartz.NET学习笔记(一) 简介
Quartz.NET是一款开源的任务调度框架,他是由Java中的任务调度框架Quartz移植而来的。官方网站https://www.quartz-scheduler.net/。
Quartz.Net的特性
运行环境
- Quartz.NET可以寄宿在其他的.NET程序中运行
- Quartz.NET可以作为独立程序运行
- Quartz.NET可以在集群中使用,支持负载均衡和故障切换
任务调度
- 任务和触发器是多对一关系, 同一个任务可以绑定到多个触发器中,但是一个触发器只能绑定一个任务
- 触发器可以在某天特定时间触发
- 触发器可以在一周某一天触发(周一-周日)
- 触发器可以在一个月中某一天触发
- 触发器可以在一年某一天触发
- 触发器支持排除日期列表
- 触发器支持指定次数的重复触发
- 触发器支持无限次数的重复触发
- 触发器支持直到某个时间/日期重复触发
- 触发器支持一定时间间隔的重复触发
任务执行
- 所有的任务类都必须实现IJob接口
- 所有的定义的任务类都可以由NET实例化
- 当触发器触发,调度器会根据当前任务的状态通知所有JobListener和TriggerListener
- 当任务完成时,系统会返回一个任务完成码来通知调度器任务成功还是失败,调度器可以根据任务完成码做出不同的反应。
任务持久化
- 支持使用NET进行任务持久化
- 支持使用内存进行任务持久化
- 自定义持久化(实现IJobStore接口)
简单例子
首先我们先用一个简单例子,对Quartz.NET有一个大概的了解。
创建项目
打开Visual Studio, 创建一个简单的控制台程序
添加Quartz.NET库
我们可以从官网下载最新的Quartz.NET的库,但是使用Nuget来管理.NET库更便捷。
打开Package Manager Console,输入
install-package Quartz
添加第一个任务
添加一个新类FirstJob.cs, 其代码如下。
public class FirstJob : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine("Hello World."); } }
所有的任务都必须实现IJob接口, IJob接口中只包含一个需要实现的方法Execute, 该方法中加入的代码,即这个任务需要干的事情。
创建调度器
在Program.cs的Main方法中加入以下代码
ISchedulerFactory schedFact = new StdSchedulerFactory(); IScheduler sched = schedFact.GetScheduler(); sched.Start();
这里使用的是抽象工厂模式, 使用默认的调度器工厂StdSchedulerFactory来创建一个调度器。所有的调度器都需要手动调用Start()方法来启动。
创建任务和触发器
在Main方法中继续添加以下代码
IJobDetail job = JobBuilder.Create<FirstJob>() .WithIdentity("myJob", "group1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .Build();
这里JobBuilder负责根据指定的任务类型产生一个任务项,并绑定任务需要的参数或者为任务进行分组。
TriggerBuilder负责产生不用类型的触发器,前面特性里面有说明,触发器有很多类型,都是在这里设置的,并且在这里可以对触发器进行分组。这里StartNow()表示触发器加入调度器后,立即执行。
使用调度器,绑定触发器和任务
前面我们只是创建了任务和触发器,他们之间现在还没有任何关联。
下面我们在Main方法中加入最后一行代码
sched.ScheduleJob(job, trigger);
调度器将触发器和任务绑定在一起。
最终实现效果
启动项目,效果如下, Hello World正确显示了
Quartz.NET学习笔记(一) 简介的更多相关文章
- Quartz.Net学习笔记(2)-简介
一.Quartz.Net是什么 1.来源 Quartz.Net是一个开源的作业调度框架: 2.下载地址 官网地址:http://www.quartz-scheduler.net/documentati ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- CUBRID学习笔记 1 简介 cubrid教程
CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...
- shiro学习笔记_0100_shiro简介
前言:第一次知道shiro是2016年夏天,做项目时候我要写springmvc的拦截器,申哥看到后,说这个不安全,就给我捣鼓了shiro,我就看了下,从此认识了shiro.此笔记是根据网上的视频教程记 ...
- Mybatis-Plus 实战完整学习笔记(一)------简介
第一章 简介 1. 什么是MybatisPlus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
- python学习笔记1--python简介和第一行代码编写
一.什么是python? python是一种面向对象,解释型语言,它语法简介,容易学习.本节博客就来说说本人学习python的心得体会. 二.python环境安装 目前python版本有python2 ...
- symfony学习笔记1—简介
1.symfony快速入门还是先看代码结构把,这个是拿到代码的第一印象,app/:整个应用的配置,模版,translations,这个可能是多语言文件什么,src/:项目php文件,vendor/:第 ...
随机推荐
- 使用Cordova打包Vue项目
因为公司项目要求, 原本的vue移动端项目, 现在要求能使用定位, 调用摄像头等功能, 并且开发成混合APP. 一个小白的孤军奋战史, 记录一下, 以备后用.... 第一步: 安装cordova 在命 ...
- Y1E001 HDI二阶板、三阶板
简单说一下我的理解: 首先我认为几阶就是几次压合,我习惯用几次压合来形容.. 一阶板我认为就是一次压合,只能打一种机械孔,在表层把 一阶板是最普通的的多层板压合方式. 如下图所示,L2~L3为芯板CO ...
- vs中 VMDebugger未能加载导致异常
,纠结了许久的一个问题,终于找到了解决 vs中 VMDebugger未能加载导致异常 错误号:80004005 搜了好多,没有一个给出完美的答案. 解决办法:工具->导入和导出设置,重置一下 ...
- 登录MES系统后台服务的操作
一:使用GIt Bash Here打开服务 文件名:MES-Server-API-SC 输入:yarn server//打开服务 文件名:MES-server-API 输入:yarn local//本 ...
- c# 集合的长度为什么是可变的
摘要: 写在前面:此随笔仅仅是作为个人学习总结,有不对的地方,请各位前辈指正O(∩_∩)O........ 一: 引入 在学习集合之前我们都学习过数组.可以知道数组的长度在声明的时候就已经被固定了,不 ...
- vue将指定区域的表格数据或element-ui中el-table的数据单笔或多笔批量导出excel
公司在后台管理系统开发中用到了 vue+element-ui 组合的框架,但随着需求的越来越复杂,前端的工作难度也呈几何倍数递增,工作量随之增大.这不,在项目中增加一个将列表数据导出为excel的需求 ...
- tyflow birth节点
0-50帧,持续出生5颗粒子,若范围为0-0,5颗粒子将在第一帧全部出生 每一帧出生5颗粒子,直到50帧结束 连续发射,在0-500帧范围内,每5颗粒子出生后,继续出生5颗 5颗粒子出生后持续50帧, ...
- VIM常用快捷键(转载)
移动光标 h,j,k,l 上,下,左,右 ctrl-e 移动页面 ctrl-f 上翻一页 ctrl-b 下翻一页 ctrl-u 上翻半页 ctrl-d 下翻半页 w 跳到下一个字首,按标点或单词分割 ...
- python语法_模块_time_datetime_random
模块:可以被公共调用的. time import time print(time.time()) 时间戳方式显示时间. time.sleep(3) 休眠3秒 time.clock() 计算cpu执行时 ...
- mac本webstrom破解
之前忙着加班一直没搞,有时间解决一下 首先编辑hosts文件 https://jingyan.baidu.com/article/f3ad7d0f55154309c3345bdd.html Mac系统 ...