第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现
2018-03-06 08:14
525 查看
一. 前奏-Timer类实现定时任务
在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是:
①.位于System.Windows.Forms里,即定时器控件,不过多介绍了
②.位于System.Threading.Timer类里 (重点介绍)
③.位于System.Timers.Timer类里 (不介绍)
下面重点介绍第二种,位于Threading下面的Timer类,观察其源码,发现有多种构造函数,我们重点介绍其中的一种。
分享一段代码:2秒后开启该线程,然后每隔4s调用一次。
分析总结:上面的代码显而易见,只能控制:延迟多久开始执行,每隔多久执行一次,至于执行多少次、什么时间关闭均无法实现,更不用说处理一些复杂的时间间隔了,所以Timer类仅仅适合处理对时间要求非常简单的定时任务。
二. 进入主题-Quartz.Net的入门使用
使用步骤:
前提:通过NuGet引入程序集或者直接下载源码进行引入,然后分五步走。
步骤一:创建作业调度池(Scheduler)
步骤二:创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
步骤三:创建并配置一个触发器即trigger
步骤四:将job和trigger加入到作业调度池中
步骤五:开启调度
下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)
分析:每个Job都需要实现IJob接口,并且显式的实现Execute方法;创建调度器除了上述方法外,还可以:
执行结果:
三. 扩展-Aop思想的体现
我们想在每次Job执行的前后,分别执行一段通用的业务,但有不想和原业务写在一起,这个时候就需要面向切面编程了,即AOP思想的体现。
Quartz.Net中Aop思想通过JobListener来实现,代码如下:
执行结果:
在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是:
①.位于System.Windows.Forms里,即定时器控件,不过多介绍了
②.位于System.Threading.Timer类里 (重点介绍)
③.位于System.Timers.Timer类里 (不介绍)
下面重点介绍第二种,位于Threading下面的Timer类,观察其源码,发现有多种构造函数,我们重点介绍其中的一种。
分享一段代码:2秒后开启该线程,然后每隔4s调用一次。
//2秒后开启该线程,然后每隔4s调用一次 System.Threading.Timer timer = new System.Threading.Timer((n) => { //书写业务逻辑 Console.WriteLine("我是定时器中的业务逻辑哦{0}",n); }, "1", 2000, 4000);
分析总结:上面的代码显而易见,只能控制:延迟多久开始执行,每隔多久执行一次,至于执行多少次、什么时间关闭均无法实现,更不用说处理一些复杂的时间间隔了,所以Timer类仅仅适合处理对时间要求非常简单的定时任务。
二. 进入主题-Quartz.Net的入门使用
使用步骤:
前提:通过NuGet引入程序集或者直接下载源码进行引入,然后分五步走。
步骤一:创建作业调度池(Scheduler)
步骤二:创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
步骤三:创建并配置一个触发器即trigger
步骤四:将job和trigger加入到作业调度池中
步骤五:开启调度
下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)
/// <summary> /// Quartz框架的使用 /// </summary> public static void Show() { //1.创建作业调度池(Scheduler) IScheduler scheduler =StdSchedulerFactory.GetDefaultScheduler(); //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行) var job = JobBuilder.Create<HelloJob>().Build(); //3.创建并配置一个触发器即trigger 1s执行一次 var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1) .RepeatForever()).Build(); //4.将job和trigger加入到作业调度池中 scheduler.ScheduleJob(job, trigger); //5.开启调度 scheduler.Start(); }
/// <summary> /// 实现IJob接口 /// </summary> class HelloJob : IJob { void IJob.Execute(IJobExecutionContext context) { Console.WriteLine("Hellow JOB"); } }
分析:每个Job都需要实现IJob接口,并且显式的实现Execute方法;创建调度器除了上述方法外,还可以:
//另外一种创建调度池的方法 var factory = new StdSchedulerFactory(); IScheduler scheduler2 = factory.GetScheduler();
执行结果:
三. 扩展-Aop思想的体现
我们想在每次Job执行的前后,分别执行一段通用的业务,但有不想和原业务写在一起,这个时候就需要面向切面编程了,即AOP思想的体现。
Quartz.Net中Aop思想通过JobListener来实现,代码如下:
/// <summary> /// Quartz中的AOP思想 /// </summary> public static void AopShow() { //1.创建Schedule IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //2.创建job (具体的job需要单独在一个文件中执行) var job = JobBuilder.Create<HelloJob>().Build(); //3.配置trigger 1s执行一次 var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1) .RepeatForever()).Build(); //AOP配置 scheduler.ListenerManager.AddJobListener(new MyAopListener(), GroupMatcher<JobKey>.AnyGroup()); //4.将job和trigger加入到作业调度池中 scheduler.ScheduleJob(job, trigger); //5. 开始调度 scheduler.Start(); } /// <summary> /// Aop类 /// </summary> public class MyAopListener : IJobListener { public string Name { get { return "hello world"; } } public void JobExecutionVetoed(IJobExecutionContext context) { } public void JobToBeExecuted(IJobExecutionContext context) { Console.WriteLine("执行前写入日志"); } public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException) { Console.WriteLine("执行后写入日志"); } }
执行结果:
相关文章推荐
- 使用System.Threading的Timer&Quartz.net两种方式实现定时执行任务,防止IIS释放timer对象
- Quartz.net 的简单使用,创建定时任务
- Quartz.Net的使用(简单配置方法)定时任务框架
- [C#]使用Quartz.NET来创建定时工作任务
- 在ASP.NET MVC4中使用Quartz.NET执行定时任务
- 使用Quartz.net、Topshelf、wcf命名管道制作的一个c#定时任务管理程序(热插拔)
- Quartz.net 2.x 学习笔记03-使用反射加载定时任务
- .NET 定时执行任务解决方案(Timer & Quartz.Net)
- Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
- Quartz.Net的使用(简单配置方法)定时任务框架
- Quartz.Net的使用(简单配置方法)定时任务框架
- Asp.Net Core 使用Quartz基于界面画接口管理做定时任务
- C# Quartz.Net 定时任务的简单使用
- 两种方式实现java定时器,使用quartz定时器框架和java自带Timer定时器,编写定时任务
- Quartz.Net的使用(简单配置方法)定时任务框架
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
- ASP.NET使用Quartz.NET实现定时任务调度
- 使用Quartz实现比Timer更强大的任务定时
- MVC 使用Quartz.Net组件实现定时计划任务
- asp.net 使用timer 定时执行任务