什么是Quartz.Net

计划任务,定时框架。大到可以做灾难转移  负载均衡。小到可以做定时生成数据,数据更新等等。

官网 http://www.quartz-scheduler.org/    Quartz.Net是Quartz    JAVA版本的移植版本,所以http://www.quartz-scheduler.org/介绍的也是java版本的,  .net的官网是https://www.quartz-scheduler.net/

本文使用quartz版本3.0.2(VS2017打开   C#7.1)

quartz的官方项目还是很完整的。学习起来很方便。

计划任务包含的元素

Scheduler-调度器

任务的管理、协调者。

像一个工厂中流水线的管理员,管理各个流水线的工作。

JOB-作业

就是要执行什么动作。

像工厂中每个流水线具体执行的什么工作。

TRIGGER-触发器

就是什么时候什么条件执行。

像工厂中每个流水线的工作时间表。

创建一个简单任务
private async void button1_Click(object sender, EventArgs e)
{
ISchedulerFactory sf = new StdSchedulerFactory();
//开启10+1个线程 只不过都是等待状态
IScheduler sched =await sf.GetScheduler(); Console.WriteLine("任务开始");
//会激活调度线程 从jobstore中读取快要执行的trigger,然后获取相关联的job进行执行
await sched.Start(); IJobDetail job = JobBuilder.Create<MyJob1>().WithDescription("工作任务描述1").WithIdentity("job1", "group1").Build(); //DateTimeOffset时间偏移,一般UTC是世界统一时间,世界各地时区不同(TimeZoneInfo),世界就不一样,所以每一个地方都有自己的时间偏移量
DateTimeOffset runtime = DateBuilder.EvenSecondDateAfterNow();
ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").WithSimpleSchedule(t=>t.WithIntervalInSeconds().RepeatForever()).Build(); //开始调度任务
await sched.ScheduleJob(job, trigger); await Task.Delay(TimeSpan.FromSeconds());
Console.WriteLine("任务结束");
await sched.Shutdown(true);
}

Quartz中的几个构件

1、Scheduler    调度器   (一个大的容器)

2、Job

3、Trigger

一个job可以有多个trigger

4、Simplethreadpool    (10+1的关系)

最终的执行都是委托给线程池执行的。 默认   10个线程池叫做workthread,  一个是调度线程叫做 quartzschedulerthread(作用获取到当前快要执行的线程)。他们都集成quartzthread

他是quartz默认的线程池,在thread上面封装的

5、JobStore

分为dbstore 和 ramstore

多线程介绍 http://www.cnblogs.com/wudequn/p/7571039.html

用到设计模式

抽象工厂

ISchedulerFactory

StdSchedulerFactory : ISchedulerFactory

DirectSchedulerFactory : ISchedulerFactory

建造者

链式建造

TriggerBuilder

JobBuilder

DateBuilder

(构建过程是稳定的

国建过程都是返回当前类的引用。方便链式构造

可插拔式,IOC模式

先读取配置文件中配置的,要是没有就默认一个。这样组件就可以被替换。

AOP

public class MyJobListener1 : IJobListener
{
public string Name
{
get
{
return "L1";
}
} public Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("JobExecutionVetoed");
});
} public Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
{
return Task.Factory.StartNew(() =>
{//执行前
Console.WriteLine("JobToBeExecuted");
});
//throw new NotImplementedException();
} public Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default(CancellationToken))
{
return Task.Factory.StartNew(() =>
{
//执行后
Console.WriteLine("JobWasExecuted");
});
}
}

sched.ListenerManager.AddJobListener(new MyJobListener1(), GroupMatcher<JobKey>.AnyGroup());

Quartz.Net优点

数据库持久化

支持集群

可视化管理界面web

事件灵活控制cron

Quartz.Net—初识的更多相关文章

  1. 20180725关于quartz的初识

    请参照: https://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ https://www.w3cschool.cn/quartz_ ...

  2. 初识Quartz之第一个Quartz实例

    转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366   版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...

  3. 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】

    初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...

  4. 初识Quartz(入门案例)+常用的Cron表达式

    1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...

  5. 初识spring与quartz整合实现定时任务

    参考资料: http://kevin19900306.iteye.com/blog/1397744 引用自别人的博客: 特别注意一点,与Spring3.1以下版本整合必须使用Quartz1,最初我拿2 ...

  6. 初识 .NET平台下作业调度器——Quartz.NET

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...

  7. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  8. 初识Quartz (一)

    首先大概的了解一下Quartz. 一:首先进入官网去看看什么是quartz.http://www.quartz-scheduler.org/ Quartz是一个功能丰富的开源作业调度库,可以集成到几乎 ...

  9. 初识Quartz(二)

    简单作业: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package quartz_pr ...

随机推荐

  1. vue列表拖拽排序功能实现

    1.实现目标:目标是输入一个数组,生成一个列表:通过拖拽排序,拖拽结束后输出一个经过排序的数组. 2.实现思路: 2.1是使用HTML5的drag功能来实现,每次拖拽时直接操作Dom节点排序,拖拽结束 ...

  2. mysql小白入门

    mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...

  3. Javascript正则RegExp对象replace方法替换url参数值

    看别的博客有用eval执行正则表达式的写法, //替换指定传入参数的值,paramName为参数,replaceWith为新值 function replaceParamVal(paramName,r ...

  4. 根据字符串从资源中取出对应的资源ResourceManager.GetObject

    ResourceManager.GetObject 根据名称从资源中取出资源 需要:我有25张 五笔图片名称是a b c d ...y 这样组成的 每张图片名字只有一个名字 我想通过字符串a取出a这张 ...

  5. 优化Unity游戏项目的脚本(下)

    金秋9月,我们祝所有的老师们:教师节快乐 ! 今天,我们继续分享来自捷克的开发工程师Ondřej Kofroň,分享C#脚本的一系列优化方法. 在优化Unity游戏项目的脚本(上)中,我们介绍了如何查 ...

  6. idea断点调试学习随笔

    1,rerun XXX,这个就是直接重新跑某个程序.2,这个相当于eclipse里面的f8,直接跑完,到下一个断点停下,没有就直接跑完程序.3,停止项目或者程序.要是自己的main呢,点一下就停下了, ...

  7. 【转】IDEA 中配置文件properties文件中文乱码解决

    1.首先我们的IDEA文件编码一般都修改为utf-8(setting-->file encodings--->Global Encoding 和 Project Encoding 都设置为 ...

  8. arcpy arcgis python实例教程--原点夹角距离定义线(坐标正算)

    arcpy arcgis python实例教程--原点夹角距离定义线(坐标正算) 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 此地理处理工具 ...

  9. ES6深入浅出-7 新版的类(上集)-2.介绍JS中的类

    声明对象原型,公有属性. obj对象,它用一个属性__proto__记录了自己的原型 改掉它的原型为公有属性.那么obj这个对象及有了hi的方法.因为obj自己没有hi.那么就去自己的原型上去找了. ...

  10. Android开发之高仿微信图片选择器

    记得刚开始做Andriod项目那会,经常会碰到一些上传图片的功能需求,特别是社交类的app,比如用户头像,说说配图,商品配图等功能都需要让我们到系统相册去选取图片,但官方却没有提供可以选取多张图片的相 ...