什么是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. Nginx服务配置文件介绍

    LNMP架构应用实战——Nginx服务配置文件介绍 nginx的配置文件比较简单,但功能相当强大,可以自由灵活的进行相关配置,因此,还是了解下其配置文件的一此信息 1.Nginx服务目录结构介绍 安装 ...

  2. 绕流振动UDF【转载】

    宏DEFINE_GRID_MOTION用来移动任意边界和流体区域内的网格节点.它提供了对节点和网格最大限度的操作,可以将刚体运动.变形和相对运动等结合起来.但是使用此UDF时,每一个时间步都必须执行. ...

  3. Tuxedo 介绍

    快速阅读 介绍Tuxedo,以及webLogic两个中间件,都是oracle旗下的产品 ,现在各银行系统用的最多.因为有部分项目涉及,所以有必须弄清楚,明白 . 什么是Tuxedo 官方介绍:http ...

  4. 从零开始带你成为JVM实战高手

    专栏大纲 1.核心gc 内存回收以及提前设置内存大小.

  5. 常用app分类

    西瓜视频 今日头条(极速版) 喜马拉雅 扫描全能王 蜻蜓FM 每天影视 抖音 小读 樊登读书 微信读书 懒人听书 京东 找靓机 拼多多 淘宝 小米有品 当当 什么值得买 小米商城 淘票票 懂车帝 小红 ...

  6. Python-matplotlib画图(莫烦笔记)

    https://www.zhihu.com/collection/260736383 https://blog.csdn.net/gaotihong/article/details/80983937 ...

  7. Guided Hacking DLL Injector 3.3

    Guided Hacking DLL Injector 3.3 https://guidedhacking.com/resources/guided-hacking-dll-injector.4/ I ...

  8. CopyOnWrite 思想及在 Java 并发包中的具体体现

    读多写少的场景下引发的问题? 假设现在我们的内存里有一个 ArrayList,这个 ArrayList 默认情况下肯定是线程不安全的,要是多个线程并发读和写这个 ArrayList 可能会有问题. 那 ...

  9. Manning Java Persistence with Hibernate & hibernate_in_action

    Manning | Java Persistence with Hibernatehttps://www.manning.com/books/java-persistence-with-hiberna ...

  10. Kali Linux又增加一个顶级域名kali.download

    Kali Linux又增加一个顶级域名kali.download 现阶段,kali.download只提供软件包和镜像下载.大家可以把该域名作为备选软件源来使用.形式如下: deb  http://k ...