第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现
一. 前奏-Timer类实现定时任务
在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是:
①.位于System.Windows.Forms里,即定时器控件,不过多介绍了
②.位于System.Threading.Timer类里 (重点介绍)
③.位于System.Timers.Timer类里 (不介绍)
下面重点介绍第二种,位于Threading下面的Timer类,观察其源码,发现有多种构造函数,我们重点介绍其中的一种。
分享一段代码:2秒后开启该线程,然后每隔4s调用一次。
1 //2秒后开启该线程,然后每隔4s调用一次 2 System.Threading.Timer timer = new System.Threading.Timer((n) => 3 { 4 //书写业务逻辑 5 Console.WriteLine("我是定时器中的业务逻辑哦{0}",n); 6 }, "1", 2000, 4000);
分析总结:上面的代码显而易见,只能控制:延迟多久开始执行,每隔多久执行一次,至于执行多少次、什么时间关闭均无法实现,更不用说处理一些复杂的时间间隔了,所以Timer类仅仅适合处理对时间要求非常简单的定时任务。
二. 进入主题-Quartz.Net的入门使用
使用步骤:
前提:通过NuGet引入程序集或者直接下载源码进行引入,然后分五步走。
步骤一:创建作业调度池(Scheduler)
步骤二:创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
步骤三:创建并配置一个触发器即trigger
步骤四:将job和trigger加入到作业调度池中
步骤五:开启调度
下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)
1 /// <summary>2 /// Quartz框架的使用3 /// </summary>4 public static void Show()5 {6 //1.创建作业调度池(Scheduler)7 IScheduler scheduler =StdSchedulerFactory.GetDefaultScheduler();8 9 //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行) 10 var job = JobBuilder.Create<HelloJob>().Build(); 11 12 //3.创建并配置一个触发器即trigger 1s执行一次 13 var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1) 14 .RepeatForever()).Build(); 15 //4.将job和trigger加入到作业调度池中 16 scheduler.ScheduleJob(job, trigger); 17 18 //5.开启调度 19 scheduler.Start(); 20 }
1 /// <summary>2 /// 实现IJob接口3 /// </summary>4 class HelloJob : IJob5 {6 void IJob.Execute(IJobExecutionContext context)7 {8 Console.WriteLine("Hellow JOB");9 } 10 }
分析:每个Job都需要实现IJob接口,并且显式的实现Execute方法;创建调度器除了上述方法外,还可以:
1 //另外一种创建调度池的方法 2 var factory = new StdSchedulerFactory(); 3 IScheduler scheduler2 = factory.GetScheduler();
执行结果:
三. 扩展-Aop思想的体现
我们想在每次Job执行的前后,分别执行一段通用的业务,但有不想和原业务写在一起,这个时候就需要面向切面编程了,即AOP思想的体现。
Quartz.Net中Aop思想通过JobListener来实现,代码如下:
1 /// <summary>2 /// Quartz中的AOP思想3 /// </summary>4 public static void AopShow()5 {6 //1.创建Schedule7 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();8 9 //2.创建job (具体的job需要单独在一个文件中执行) 10 var job = JobBuilder.Create<HelloJob>().Build(); 11 12 //3.配置trigger 1s执行一次 13 var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1) 14 .RepeatForever()).Build(); 15 //AOP配置 16 scheduler.ListenerManager.AddJobListener(new MyAopListener(), GroupMatcher<JobKey>.AnyGroup()); 17 18 //4.将job和trigger加入到作业调度池中 19 scheduler.ScheduleJob(job, trigger); 20 21 //5. 开始调度 22 scheduler.Start(); 23 } 24 /// <summary> 25 /// Aop类 26 /// </summary> 27 public class MyAopListener : IJobListener 28 { 29 public string Name 30 { 31 get 32 { 33 return "hello world"; 34 } 35 } 36 public void JobExecutionVetoed(IJobExecutionContext context) 37 { 38 39 } 40 public void JobToBeExecuted(IJobExecutionContext context) 41 { 42 Console.WriteLine("执行前写入日志"); 43 } 44 public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException) 45 { 46 Console.WriteLine("执行后写入日志"); 47 } 48 }
执行结果:
第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现相关推荐
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- matlab简单程序实例_visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)...
近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...
- (王道408考研操作系统)第四章文件管理-第一节7:文件共享
文章目录 一:基于索引结点的共享方式(硬链接) (1)介绍 (2)Linux演示 二:基于符号链的共享方式(软链接) (1)介绍 (2)Linux演示 所谓文件共享就是指 使多个用户(进程)共享同一个 ...
- visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)
近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...
- ABOV 第一节 ABOV 程序生成器的使用 2021-11-11
ABOV 程序 第一节 ABOV 程序生成器的使用 ABOV官网 文章目录 ABOV 程序 前言 一.ABOV是什么? 二.使用步骤 1.选择需要用到的IC资料 2.利用软件初步生产IC配置文件 3. ...
- 初一第一节计算机课,初中信息技术第一节课-常规教育ppt课件
<初中信息技术第一节课-常规教育ppt课件>由会员分享,可在线阅读,更多相关<初中信息技术第一节课-常规教育ppt课件(17页珍藏版)>请在人人文库网上搜索. 1.欢迎走进信息 ...
- 计算机动画制作第一节教案,付雪_ 第四章动画制作_第一节制作逐帧动画——教案设计(7页)-原创力文档...
信息技术课堂教学设计 教学内容 第四章 第一节 制作"逐帧"动画 学 校 北京市高井中学 授课教师 付 雪 课 型 新授课 课 时 1 日 期 教学 目标 = 1 \* GB1 ⒈ ...
- 欧阳萍经典听口班第四季_第一节:餐厅里_学习笔记
欧阳萍经典听口班第四季 第一节:餐厅里 主要学习方法 1.echo练口语听力方法总体先听一遍,此时大概率听不懂1.一句一句话的听2.看着字幕在脑子里想一遍本句话3.自己复述本句话4.如有听不懂则反复练 ...
- 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...
第四章第一节 数字图像的特征 一.模拟与数字 (一)模拟信号 在信息科学中,能够计数的离散量称为数字信号(整数),不能计数的连续量称为模拟信号. 模拟是以某种范畴的表达方式如实地反映另一种范畴.例 ...
最新文章
- 叉叉助手停运有什么替代的_亚马逊全球开店助手将停止服务!卖家:终究是错付了...
- hibernate中的一级缓存
- Morph-UGATIT:一种支持渐进式域迁移的图像翻译方法
- java 在已有的so基础上封装jni_webshell中的分离免杀实践java篇
- 基于JAVA+SpringBoot+Mybatis+MYSQL的汽车租赁系统
- asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...
- css 列表内容滚动,stroll.js 炫酷的 CSS3 列表滚动动画集合 - 文章教程
- 数据结构-------赫夫曼树
- 拓端tecdat|R语言旅行推销员问题TSP
- 深入浅出数据分析 - 数据分析引言
- 华为A1路由器虚拟服务器,华为a1路由器怎么设置
- Postgresql使用技巧
- 单元二:全桥MOS/IGBT电路(后端全桥电路的搭建)
- 解决excel转pdf出现的折行问题
- PostgreSQL 简介
- 6开机白苹果一闪一灭_苹果6s开机一直显示白苹果,过会就直接黑屏,重复一直这样...
- 经常说的ROI是什么,怎么计算
- 耗时3个多月、总结过往5年,马毅曹颖沈向洋撰文智能两大原则
- 输入5V,输出5V限流芯片,可调限流至4.8A
- ali的ons mq运行一段时间后消费下降并导致堆积问题查验