Quartz.Net—初识
- 什么是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—初识的更多相关文章
- 20180725关于quartz的初识
请参照: https://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ https://www.w3cschool.cn/quartz_ ...
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
- 初识Quartz(入门案例)+常用的Cron表达式
1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...
- 初识spring与quartz整合实现定时任务
参考资料: http://kevin19900306.iteye.com/blog/1397744 引用自别人的博客: 特别注意一点,与Spring3.1以下版本整合必须使用Quartz1,最初我拿2 ...
- 初识 .NET平台下作业调度器——Quartz.NET
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
- Quartz.Net进阶之一:初识Job作业和触发器
前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...
- 初识Quartz (一)
首先大概的了解一下Quartz. 一:首先进入官网去看看什么是quartz.http://www.quartz-scheduler.org/ Quartz是一个功能丰富的开源作业调度库,可以集成到几乎 ...
- 初识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 ...
随机推荐
- Java 基础:单例模式 Singleton Pattern
1.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...
- [Shell]Telnet反弹shell
原作者:包子love 文章出处:黑白之道 今天给大家介绍两种telnet反弹shell的方法,相对于其他方式反弹shell要简单一点,可作为按需远程控制或留后门使用,希望可以帮助到大家. 前提条件:目 ...
- Java NIO?看这一篇就够了!
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.在前面2篇文章< ...
- spaceclaim脚本(线生成面体)
#新建一个列表,用来保存修剪曲线(PS:修建曲线的意思是开始点和结束点不在一起,圆就不属于修建曲线) #注意和Line,Circle类型等的区别 curves = List[ITrimmedCurve ...
- CentOS安装相应版本的内核源码
昨天接到同事给安排的新任务,测试系统性能:网上查了些资料,目测perf功能很强大,而且是内核源码自带的,编译安装即可使用:看了下自己的虚拟机,没有内核源码,好吧,装一个: 查看一下系统版本: #cat ...
- Perl关于分椰子的趣味问题
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先晚上 ...
- argmin ,argmax函数
在数学中,ARG MAX(或ARGMAX)代表最大值,即给定参数的点集,给定表达式的值达到其最大值: 换一种说法, 是f(x)具有最大值M的x的值的集合.例如,如果f(x)是1- | x |,那么它在 ...
- mycat启动报Unable to start JVM: No such file or directory (2)【转】
mycat启动失败,查看日志 /mycat/logs/wrapper.log发现如下信息 1 STATUS | wrapper | 2017/11/22 16:15:17 | --> Wra ...
- Gradle基础:11:使用Kotlin的Gradle(转)
Gradle基础及进阶(转) https://blog.csdn.net/liumiaocn/article/category/8369185 Gradle基础:1: 简介与安装 Gradle基础:2 ...
- 研究 node lzma 的压缩解压缩
/ eslint-disable / // 压缩为 lzma var fs = require('fs'); var lzma = require('lzma-native'); var compre ...