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学习笔记(一) 简介的更多相关文章

  1. Quartz.Net学习笔记(2)-简介

    一.Quartz.Net是什么 1.来源 Quartz.Net是一个开源的作业调度框架: 2.下载地址 官网地址:http://www.quartz-scheduler.net/documentati ...

  2. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  3. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  4. CUBRID学习笔记 1 简介 cubrid教程

    CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...

  5. shiro学习笔记_0100_shiro简介

    前言:第一次知道shiro是2016年夏天,做项目时候我要写springmvc的拦截器,申哥看到后,说这个不安全,就给我捣鼓了shiro,我就看了下,从此认识了shiro.此笔记是根据网上的视频教程记 ...

  6. Mybatis-Plus 实战完整学习笔记(一)------简介

    第一章    简介      1. 什么是MybatisPlus                MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...

  7. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  8. python学习笔记1--python简介和第一行代码编写

    一.什么是python? python是一种面向对象,解释型语言,它语法简介,容易学习.本节博客就来说说本人学习python的心得体会. 二.python环境安装 目前python版本有python2 ...

  9. symfony学习笔记1—简介

    1.symfony快速入门还是先看代码结构把,这个是拿到代码的第一印象,app/:整个应用的配置,模版,translations,这个可能是多语言文件什么,src/:项目php文件,vendor/:第 ...

随机推荐

  1. P2733 家的范围 Home on the Range-弱DP

    P2733 家的范围 Home on the Range 思路 :转化为以每个点为右下角的 最大正方形的边长 #include<bits/stdc++.h> using namespace ...

  2. 【redis】在dotnet core下的redis的使用

    1.Install-Package Microsoft.Extensions.Caching.Redis -Version 2.2.0 2.注入 services.AddDistributedRedi ...

  3. 【redis】在windos下的redis服务器的搭建

    1.下载Redis-x64-3.2.100(楼主用的版本,需要安装包的可以找我要) 下载官方版本 2.解压后在cmd下运行 redis-server redis.windos.conf 此时redis ...

  4. Core Location实现定位

    2013/4/22记录: 注意:如非必要,不应该多次轮询位置信息i 使用时,可根据需要制定精度,通过仔细制定所需的绝对最低精度级别,可以纺织不必要的电池消耗.    导入:CoreLocation.f ...

  5. MyBatis3系列__06查询的几点补充

    关于查询的一点补充: 当查询部门信息时,希望查询该部门下的所有员工,下面会采取两种方式实现: 1.联合查询 public Department getDeptWithEmpById(Integer i ...

  6. iOS 上传自己的工程(模块工具类)到cocoapods上遇到坑

    最近在研究把自己写的工具类和模块上传到cocoapods上, 再新构建项目中可以直接使用cocoapods使用  也可以更新之前的版本 便于维护项目. 但是在这个过程中遇到了种种问题 但是最后还是解决 ...

  7. JS for循环 if判断、white循环。小练习

    1----输入正整数n,求1-n的和. var n=prompt("请输入一个正整数"); var sum=0; for (var i=1;i<=n;i++) { sum=s ...

  8. Java 什么是线程安全

    当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的.其中,正确性指某个类的行 ...

  9. js的七大设计原则--迪米特原则

    一.什么是迪米特原则 迪米特原则也叫最少知道原则,一个类应该对其他对象保持最少的了解.通俗来讲,就是一个类对自己依赖的类知道的越少越好.因为类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另 ...

  10. 2018 大湾区(深圳) .NET技术分享交流会 第一期

    .NET Core 2.1 已于2018年5月30日正式发布,邀请粤港澳大湾区.NET技术专家和从业人员,一起分享与交流.NET技术的发展方向,提高粤港澳大湾区.NET技术交流氛围,挖掘.NET高级人 ...